동일한 이미지 블록 (크기가 40x40 또는 1600 픽셀)이 동일한 gif89a가있는 경우 gif 파일의 최종 크기가 계속 증가해야합니다 (제너럴 인코더라고 가정)?gif 이미지 형식의 의도 된 동작을 명확히하십시오.
저는 LZW 압축이 어떻게 작동하는지 이해하려고합니다. W3C 스펙에 따르면 여러 데이터 블록으로 구성된 전체 데이터 스트림 자체를 압축해야하므로 동일한 이미지 프레임을 여러 번 반복하면 오버 헤드가 거의 발생하지 않을 것이라고 생각했습니다. 이미지 블록). 이 경우가 아닌 것 같아요. 여러 개의 인코더 (Gimp, Photoshop)로 테스트했습니다.
모든 인코더에서 이것이 기대 되나요? 아니면이 두 가지가 제대로 수행되지 않았습니까?
김프로 테스트 한 gif는 240 개의 동일한 이미지 블록이 있고 크기가 58k이고 이미지 블록이 500 개 였는데 내 직감보다 덜 인상적으로 보입니다 (내 직감은 꽤 바보 같아서 만약 누군가가 내게 그렇게 잘못되었다고 말하면 충격을받을 것입니다.)
[편집]
나는 그것이 내가 생각에서지고있어 적절한 대답을받을 무엇을 확장 할 필요가. 나는 gif 이미지를 수작업으로 만들고 싶다. (아마도 엔코더를 써야한다.) 다른 것들보다 더 잘 압축 할 수있는 몇 가지 단점을 이용하게 될 것이다.
반복적으로 타일링 방식으로 사용되는 여러 하위 이미지를 gif에 포함하고 싶습니다. 이미지 크기가 큰 경우 (이 경우 1700x2200) gif는 타일을 타일로 보지 못하기 때문에 타일을 잘 압축 할 수 없으며 왼쪽 상단부터 하단 오른쪽까지의 래스터와 최대 30 픽셀의 수평 슬라이스 어떤 주어진 타일의 심볼은 30x35 타일 자체가 아닌 심볼을주고 압축됩니다.
타일 자체는 잡지의 스캔에서 알파벳과 일부 구두점을 사용합니다. 물론 원래의 스캔에서 각 "a"는 압축에 도움이되지 않는 다른 모든 것보다 약간 씩 다르며 스캔시에도 많은 소음이 발생하여 도움이되지 않습니다.
각 타일은 이미지의 어딘가에서 수십에서 수백 번까지 반복되며 각 타일은 주어진 타일 조각의 30 배 또는 40 배 크기이므로 어떤 이득이있는 것처럼 보입니다 (gif 파일 형식이 내 목표를 향해 구부릴 수 있다고 가정).
gimp에서 25 개의 하위 이미지를 반복적으로 사용하는 gif를 손으로 직접 만들었습니다 (약 700 회이지만 잃어 버렸습니다). 압축되지 않은 크기가 90k이지만 압축하면 다시 11k로 떨어집니다. 각 하위 이미지의 상단/왼쪽 좌표가 다르더라도 (이는 하위 이미지의 헤더에서 4 바이트까지만 가능합니다.)
비교해 보면, 단일 프레임의 시각적으로 동일한 이미지는 75k입니다. 이 이미지는 압축되지 않습니다.
아직 파일로 알아 내야 할 다른 문제가 있습니다 (gif89a이며 각 프레임을 길이가 0ms로 설정 했는데도 애니메이션으로 처리하므로 모든 것을 볼 수는 없습니다). 바로). 나는 이것을하기 위해 인코더를 어떻게 만들지 생각조차 할 수 없다 ... 그것은 글리프의 가장 잘 보이는 (또는 더 잘 생긴 것 중 적어도 하나의) 버전을 선택해야 할 것이다. x, y는 항상 잘 정렬되지는 않지만 오버레이하는 것이 가장 좋습니다.
이것은 주로 cbr/cbz 전자 책으로 스캔 한 잡지에 사용됩니다.
이 방법을 테스트하는 가장 좋은 방법은 명시된 압축 방식으로 "손으로"LZW 스트림을 생성하고 어떤 디코더가 가져올지를 확인하는 것입니다. (실제보다 더 두렵게 들립니다.) – nneonneo
프레임은 개별적으로 LZW로 인코딩됩니다. GIF 파일에 연속적으로 동일한 프레임을 배치하는 대신 하나의 프레임을 길게 지연시킬 수 있습니다 (각 프레임에는 다음 프레임이 표시 될 때까지 지연이 포함 된 자체 GCE 블록이 있습니다). – Michael
@Michael 긴 지연으로 하나의 프레임을 갖는 것은 내 의도가 아닙니다. 오히려 이미지의 여러 위치를 타일로 사용하려고했습니다. 이것은 물론 각각에 대한 상단/좌측 좌표를 변경하는 것을 의미 할 것이며, 압축 할 수는 없지만 나머지 블록은 (또는 그렇게 생각할 것입니다). 그러나 나는 그렇지 않다고 생각한다. –