투명한 단일 픽셀 이미지의 최소 파일 크기
가장 작은 (파일 크기 기준) 투명한 1 픽셀 이미지를 찾고 있습니다.
현재 가장 인기있는 것 같은 49 바이트의 gif가 있습니다.
하지만 몇 년 전에 40 바이트 미만인 것을 가지고 있었던 것을 기억합니다. 32 바이트 일 수 있습니다.
누구든지 더 잘할 수 있습니까? 최신 웹 브라우저에서 그래픽 형식을 표시하고 투명성을 존중하는 한 그래픽 형식은 문제가되지 않습니다.
업데이트 : 좋아, 42 바이트의 투명한 단일 픽셀 gif를 찾았습니다 : http://bignosebird.com/docs/h3.shtml
UPDATE2 : 43 바이트 미만은 일부 클라이언트에서 불안정한 것처럼 보입니다. 그걸 가질 수 없어.
이 blank.gif
파일을 체크 아웃 하십시오 (43 바이트). 49 미만 : D
다음은 모든 곳에서 작동해야하는 32 바이트 투명 GIF입니다.
data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEAAAAALAAAAAABAAEAAAI=
47 49 46 38 39 61 01 00 01 00 00 00 00 21 F9 04
01 00 00 00 00 2C 00 00 00 00 01 00 01 00 00 02
설명
가능한 가장 작은 GIF를 얻는 것은 사용중인 GIF 사양의 구현에 따라 다릅니다. 웹 브라우저는 일반적으로 GIF 파일을 디코딩 할 때 관대합니다. 한 브라우저에서는 투명하게 작동하지만 다른 브라우저에서는 흰색 / 검은 색으로 작동하는 정말 작은 GIF를 찾을 수 있습니다. 그리고 Gimp, Paint 및 Photoshop과 같은 소프트웨어에서는 열리지 않을 수도 있습니다.
거의 유효하지 않은 가장 작은 투명 GIF는 32 바이트입니다. 예고편과 일부 LZW 데이터를 버릴 수 있고 거의 모든 소프트웨어에서 여전히 열리기 때문에 "거의 유효"합니다.
이는 GIF 사양 에 따라 수행되며 각 구성 요소는 다음과 같이 분류 할 수 있습니다.
- 파일 서명 / 버전, 6 바이트
- 논리적 화면 설명자 , 7 바이트
- 선택 사항 : 전역 색상 표 , 6 바이트 ¹
- 옵션 : 그래픽 제어 확장 , 8 바이트 ²
- 이미지 설명자 , 10 바이트
- LZW 데이터 , 1-4 바이트 ³
- 선택 사항 : 예고편 (
0x3B
), 1 바이트 ⁴
¹ Global Color Table 은 Logical Screen Descriptor 에서 비활성화하여 안전하게 제거 할 수 있습니다.
² 이것은 대부분의 소프트웨어에서 투명성을 위해 필요합니다.
³ LZW 데이터의 3 바이트 만 필요하며 바이트는 거의 모든 것이 될 수 있습니다. 의 첫 번째 바이트 만 0x02
엄격하게 필요합니다.
⁴ 예고편은 악영향없이 제거 할 수 있습니다.
대부분의 GIF 소프트웨어에는 글로벌 / 로컬 색상 표가 있어야합니다. 추가 감소 (예 : 전역 색상 표 삭제)는 일부 브라우저에서 작동 할 수 있지만 그 효과는 일반적으로 구현에 따라 다릅니다. 편집 : 전역 색상 표를 비활성화 하는 플래그 가 있으며 문제를 일으키지 않는 것 같습니다.
기타 예 :
다음 24 바이트는 Chrome에서 투명한 GIF로 렌더링되지만 Firefox에서는 불투명 한 흰색입니다.
47 49 46 38 39 61 01 00 01 00 00 00 00 2C 00 00 00 00 01 00 01 00 00 02
data:image/gif;base64,R0lGODlhAQABAAAAACwAAAAAAQABAAA=
다음 14 바이트는 Chrome에서만 작동하지만 더 이상 작동하지 않습니다.
47 49 46 38 39 61 01 00 01 00 00 00 00 2C
data:image/gif;base64,R0lGODlhAQABAAAAACw=
다음은 C # 바이트 배열에서 사용하는 것입니다 (파일 액세스 방지).
static readonly byte[] TrackingGif = { 0x47, 0x49, 0x46, 0x38, 0x39, 0x61, 0x1, 0x0, 0x1, 0x0, 0x80, 0x0, 0x0, 0xff, 0xff, 0xff, 0x0, 0x0, 0x0, 0x2c, 0x0, 0x0, 0x0, 0x0, 0x1, 0x0, 0x1, 0x0, 0x0, 0x2, 0x2, 0x44, 0x1, 0x0, 0x3b };
asp.net MVC에서는 다음과 같이 반환 될 수 있습니다.
return File(TrackingGif, "image/gif");
Jacob의 바이트 배열 답변을 확장하기 위해 포토샵에서 만든 투명한 1x1 gif에 대한 c # 바이트 배열을 생성했습니다 .
static readonly byte[] TrackingGif = { 0x47, 0x49, 0x46, 0x38, 0x39, 0x61, 0x01, 0x00, 0x01, 0x00, 0x81, 0x00, 0x00, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x21, 0xff, 0x0b, 0x4e, 0x45, 0x54, 0x53, 0x43, 0x41, 0x50, 0x45, 0x32, 0x2e, 0x30, 0x03, 0x01, 0x01, 0x00, 0x00, 0x21, 0xf9, 0x04, 0x01, 0x00, 0x00, 0x00, 0x00, 0x2c, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x01, 0x00, 0x00, 0x08, 0x04, 0x00, 0x01, 0x04, 0x04, 0x00, 0x3b};
http://polpo.org/blank.gif 는 gifsicle로 만든 37 바이트 투명 GIF입니다.
css-ready base64 형식 :
data:image/gif;base64,R0lGODlhAQABAHAAACH5BAUAAAAALAAAAAABAAEAAAICRAEAOw==
참조 : http://www.google-analytics.com/__utm.gif , 35B
Perl (45B)의 대안 :
## tinygif ## World's Smallest Gif ## 35 bytes, 43 if transparent ## Credit: http://www.perlmonks.org/?node_id=7974 use strict; my($RED,$GREEN,$BLUE,$GHOST,$CGI); ## Adjust the colors here, from 0-255 $RED = 255; $GREEN = 0; $BLUE = 0; ## Set $GHOST to 1 for a transparent gif, 0 for normal $GHOST = 1; ## Set $CGI to 1 if writing to a web browser, 0 if not $CGI = 0; $CGI && printf "Content-Length: %d\nContent-Type: image/gif\n\n", $GHOST?43:35; printf "GIF89a\1\0\1\0%c\0\0%c%c%c\0\0\0%s,\0\0\0\0\1\0\1\0\0%c%c%c\1\ +0;", 144,$RED,$GREEN,$BLUE,$GHOST?pack("c8",33,249,4,5,16,0,0,0):"",2,2,4 +0;
실행 ...
$ perl tinygif > tiny.gif
$ ll tiny.gif
-rw-r--r-- 1 stackoverflow staff 45B Apr 3 10:21 tiny.gif
투명 도트, 43 바이트 :
echo "\x47\x49\x46\x38\x39\x61\x1\x0\x1\x0\x80\x0\x0\xff\xff\xff\xff\xff";
echo "\xff\x21\xf9\x04\x1\x0a\x0\x1\x0\x2c\x0\x0\x0\x0\x1\x0\x1\x0";
echo "\x0\x2\x2\x4c\x1\x0\x3b";
주황색 점, 35 바이트 :
echo "\x47\x49\x46\x38\x37\x61\x1\x0\x1\x0\x80\x0\x0\xfc\x6a\x6c\x0";
echo "\x0\x0\x2c\x0\x0\x0\x0\x1\x0\x1\x0\x0\x2\x2\x44\x1\x0\x3b";
색상 표 미포함 (검정색으로 칠할 수 있음), 26 바이트 :
echo "\x47\x49\x46\x38\x39\x61\x1\x0\x1\x0\x0\xFF";
echo "\x0\x2C\x0\x0\x0\x0\x1\x0\x1\x0\x0\x2\x0\x3B";
내가 얼마 전에 발견 한 처음 두 개는 (소심함이 취약한시기에) 출처를 기억하지 못합니다. 내가 여기서 찾은 가장 최근의 것 .
추신 : 스페이서가 아닌 추적 목적으로 사용하십시오.
가장 기억에 남는 1x1 (38 바이트)라고 생각합니다.
data:image/gif,GIF89a%01%00%01%00///;
GIF 헤더 사양에 따르면 :
GIF Header
Offset Length Contents
0 3 bytes "GIF"
3 3 bytes "87a" or "89a"
6 2 bytes <Logical Screen Width>
8 2 bytes <Logical Screen Height>
첫 번째 %01%00
는 너비 = 0x0001입니다.
1px는 %01%00
0x0001과 같습니다.
하지 %00%01
그렇지 않으면 0x0100은 될 것입니다
두 번째는 위와 같은 높이입니다.
next 3 bytes you can input anything, browser can parse it
e.g. ///
or !!!
or ,,,
or ;;;
or +++
last one byte must be: ;
,
!
by the way, if you use ///
or \\\
at the 3 bytes next to size
page title will display last character, otherwise will show gif,...
tested with Chrome, Firefox both worked, IE does not works
http://www.maproom.co.uk/0.gif Is 43 bytes, shaves a little bit.
You shouldn't really use "spacer gifs". They were used in the 90s; now they are very outdated and they have no purpose whatsoever, and they cause several accessibility and compatibility problems.
Use CSS.
I remember once, a long time ago, I tried to create the smallest gif possible. If you follow the standard, If I remember correctly, the size is 32 bytes. But you can "hack" the specification and have a 26-28 byte, that will show in most browsers. This GIF is not entirely "correct" but works, sometime. Just use a GIF header specification and a HEX editor.
참고URL : https://stackoverflow.com/questions/2570633/smallest-filesize-for-transparent-single-pixel-image
'code' 카테고리의 다른 글
onAttach ()가 Fragment에서 호출되지 않았습니다. (0) | 2020.11.26 |
---|---|
java.lang.RuntimeException : com.android.builder.dexing.DexArchiveMergerException : Android Studio 3.0에서 dex를 병합 할 수 없습니다. (0) | 2020.11.26 |
angularjs에서 선택 상자의 기본값을 어떻게 설정합니까? (0) | 2020.11.26 |
프로세스가 도커 컨테이너 내에서 실행 중인지 확인하는 방법 (0) | 2020.11.26 |
Swift에서 클래스 레벨 함수를 어떻게 선언합니까? (0) | 2020.11.26 |