ImageMagick - .PNG에서 정확한 색상 팔레트를 유지하는 방법

ImageMagick - .PNG에서 정확한 색상 팔레트를 유지하는 방법

ImageMagick에서 ( 나중에 다시) convert(1)변환하는 데 사용하려고 합니다..tga.png정확한 색상 팔레트 유지그 것이 사용되었습니다.

소스 이미지는 표준 8비트 256 색상 팔레트에서 24비트 RGB 값을 포함하는 TARGA 색상 인덱스 파일입니다. 이 256가지 색상 중 239가지가 실제로 이미지의 픽셀 값으로 사용됩니다.

그러나 간단한 경우 convert a.tga a.pngPNG를 생성하면 사용되지 않는 팔레트 색상이 제거되고 다른 팔레트 값도 해당 색인이 변경됩니다. 기본적으로 색상 팔레트를 유지하면서 변환하거나 .tiff잘 작동합니다(다음을 사용하여 .gif색상표를 수동으로 확인했습니다).identify -verbose a.tiff

% identify a.png a.tga a.tif a.gif
a.png PNG 320x200 320x200+0+0 8-bit sRGB 239c 29549B 0.000u 0:00.000
a.tga TGA 320x200 320x200+0+0 8-bit sRGB 256c 64790B 0.000u 0:00.000
a.tif TIFF 320x200 320x200+0+0 8-bit sRGB 256c 65818B 0.000u 0:00.000
a.gif GIF 320x200 320x200+0+0 8-bit sRGB 256c 29830B 0.000u 0:00.000

팔레트가 정확히 동일하게 유지되기를 원합니다(예: TGA index 55값이 있는 경우 R=200 G=150 B=100결과 PNG는 다음과 같아야 합니다).동일한R=200 G=150 B=100동일한인덱스 위치 55. 또한 이 이미지에서 사용되지 않은 인덱스 값도 동일한 값으로 동일한 인덱스 위치에 유지되어야 합니다(이유는 나중에 이미지에 사용된 픽셀에 대한 인덱스 값을 하드코딩한 타사 코드에서 사용하게 되기 때문입니다). 씌우다)

본질적으로 나는 원한다풀 컬러 팔레트는 정확히 동일하게 유지됩니다.TGA-> PNG-> 로 변환할 때 TGA.

imagemagick이 이를 수행할 수 있으며 어떻게 수행할 수 있습니까(또는 그렇지 않은 경우 자체 도구에 대한 대안이 있습니까)? ( -colors 256등과 같은 다른 옵션을 사용해 보았지만 소용이 없었습니다 -remap a.tga)png8:

ImageMagick 6.9.10-23 Q16필요한 경우 Debian Buster를 사용하고 있습니다.

고쳐 쓰다:옵션이 있는 것 같더라구요-png 정의:색상 맵 유지=true제가 원하는 것 같지만 팔레트를 사용할 때 작동하지 않는 것 같나요? !

% convert a.tga -define png:preserve-colormap=true png8:a.png
convert-im6.q16: Valid palette required for paletted images `a.png' @ error/png.c/MagickPNGErrorHandler/1641.

(그것은 없이도 작동 png8:하지만 color_type:2색인화된(팔레트 포함) 대신 트루컬러 PNG(팔레트 없음)를 생성하므로 color_type: 3목적이 무산됩니다...

답변1

이 문제매우 유익하며 옵션이 부족할 때 수동으로 문제를 해결하기 위해 PNG 작성기를 사용하는 놀랍도록 간단한 Perl 스크립트 해결 방법도 제공합니다.

그러나 대안으로 패키지를 사용해 보았는데 GraphicsMagick 1.3.35이 패키지가 내 TGA 파일에서 작동하지 않는 것 같지만(그렇다고 주장하지만) 부분적인 솔루션을 제공합니다.

마지막으로 ImageMagick과 GraphicsMagick의 조합을 사용하여 PNG이 파이프라인과 동일한 팔레트에 대한 색상 인덱스를 생성하여 이를 달성했습니다.TGA

convert a.tga tiff:- | gm convert - a.png

투박하지만 효과적입니다. 누군가가 있다면 더 깨끗한 솔루션을보고 싶습니다 ...

관련 정보