Imagemagick 변환을 사용하여 다음과 같이 pdf 파일을 png로 변환합니다.
Magick convert -density 300 PointOnLine.pdf -quality 90 PointOnLine.png
다음과 같이 경고합니다.
convert: profile 'icc': 'RGB ': RGB color space not permitted on grayscale PNG `PointOnLine.png' @ warning/png.c/MagickPNGWarningHandler/1744.
그리고 생성된 png 이미지는 모두 검은색입니다. 그러나 jpg 이미지로 변환하는 것은 괜찮습니다. 문제는 무엇입니까? 감사해요.
답변1
출력 파일 이름 앞에 -colorspace RGB를 추가해 보세요.
convert -density 300 PointOnLine.pdf -quality 90 -colorspace RGB PointOnLine.png
답변2
그만큼선적 서류 비치이렇게 말합니다:
PNG RW 휴대용 네트워크 그래픽 libpng-1.0.11 이상이 필요하며, libpng-1.2.5 이상이 권장됩니다. PNG 사양은 인치당 픽셀 단위를 지원하지 않고 센티미터당 픽셀 단위만 지원합니다. 특정 관련 이미지 프로필을 읽지 않으려면 -define profile:skip=name(예: profile:skip=ICC)을 사용하십시오.
따라서 출력파일 이름 앞에 -define profile:skip=ICC
(또는 )을 추가해 보세요.skip="*"
또한보십시오:정의 명령에 대한 문서
답변3
ImageMagick 7.1.1-8을 사용하고 있는데 동일한 문제가 발생했습니다.
$ magick example.pdf output.png
magick: profile 'icc': 'RGB ': RGB color space not permitted on grayscale PNG `output.png' @ warning/png.c/MagickPNGWarningHandler/1526.
$ magick -version
Version: ImageMagick 7.1.1-8 Q16-HDRI x86_64 d92cb0e65:20230421 https://imagemagick.org
Copyright: (C) 1999 ImageMagick Studio LLC
License: https://imagemagick.org/script/license.php
Features: Cipher DPC HDRI OpenMP(4.5)
Delegates (built-in): bzlib djvu fontconfig freetype heic jbig jng jpeg lcms lqr lzma openexr png raqm tiff webp x xml zlib
Compiler: gcc (7.5)
$
제 경우에는 ImageMagick(Ghostscript 사용)이 입력 PDF 파일을 읽고 ICC 프로필이 포함된 sRGB 색상 공간의 이미지 데이터를 생성합니다.
$ magick example.pdf -verbose info: | grep "Colorspace:"
Colorspace: sRGB
$ magick example.pdf -verbose info: | grep -A1 "Profiles:"
Profiles:
Profile-icc: 2576 bytes
$
해당 이미지 데이터를 PNG 파일로 저장할 때 ImageMagick은 자동으로 색상 공간을 최적화하고 파일을 다음과 같은 회색조 PNG로 저장합니다.색상 유형 0:
$ magick output.png -verbose info: | grep "Colorspace:"
Colorspace: Gray
$ magick output.png -verbose info: | grep "color_type"
png:IHDR.color_type: 0 (Grayscale)
$
하지만 그렇습니다~ 아니다내장된 ICC 프로파일을 제거하십시오:
$ magick output.png -verbose info: | grep -A1 "Profiles:"
Profiles:
Profile-icc: 2576 bytes
$
이것이 경고의 내용입니다. libpng는 다음을 기대하지 않습니다.색상ICC 프로파일이 포함되어 있습니다.회색조PNG.
경고를 없애려면 다음 중 하나를 수행하세요.
- ICC 프로필을 유지하지만 일반적으로 경고를 숨깁니다.
- ICC 프로필을 제거하거나
- ICC 프로필을 유지하고 그레이스케일 PNG로 저장하지 마세요.
ICC 프로필을 유지하지만 일반적으로 경고를 숨깁니다.
단순히 경고를 숨기려면 -quiet
옵션을 사용하세요. 결국 이는 오류가 아니라 경고일 뿐입니다.
$ magick example.pdf -quiet output.png
$
단점은 나중에 다른 경고가 표시되더라도 이미 해당 경고를 숨기고 있기 때문에 알아차리지 못할 수 있다는 것입니다.
ICC 프로필 제거
대신 ICC 프로필을 제거하도록 선택할 수 있습니다. 그렇게 하는 방법에는 여러 가지가 있습니다. 예를 들어 다른 답변에서는 색상 공간 변경에 대해 언급합니다. ImageMagick은 색상 공간을 변경할 때 내장된 프로필을 자동으로 제거하기 때문에 (때때로) 작동합니다.
(void) DeleteImageProfile(image,"icc");
(void) DeleteImageProfile(image,"icm");
이 접근 방식에는 두 가지 단점이 있습니다.
이미지가 이미 색상 공간 sRGB에 있고
-colorspace sRGB
색상 공간 sRGB로 변환하는 데 사용하는 경우 ImageMagick은 연산자를 무시하므로 프로필이 제거되지 않습니다. 예를 들어 입력 PDF 파일은 sRGB 색상 공간의 이미지를 생성했는데 이는-colorspace sRGB
효과가 없으며 프로필이 제거되지 않음을 의미합니다.$ magick example.pdf -colorspace sRGB -verbose info: | grep -A1 "Profiles:" Profiles: Profile-icc: 2576 bytes $
-colorspace RGB
반대로 이미 RGB 색상 공간에 있는 이미지에 를 사용하는 경우에도 마찬가지입니다 . 따라서 이 방법을 사용하여 ICC 프로파일을 제거하려면 이미지가 sRGB인지 RGB인지 미리 확인하고 그에-colorspace
따라 사용해야 합니다.-colorspace
분명히 이미지의 색상 공간을 변경하는 데 사용하면 이미지의 색상이 변경되어 이미지가 다르게 보일 수 있습니다. 따라서 프로파일을 제거하기 위해 색공간을 다른 색공간으로 변환한 후에는 색공간을 다시 원래 색공간으로 변환해야 합니다. 따라서 귀하의 명령은 연산자를 두 번 사용합니다-colorspace
. sRGB인 예제 파일의 경우 먼저 RGB로 변환한 다음 다시 sRGB로 변환합니다.$ magick example.pdf -colorspace RGB -colorspace sRGB -verbose info: | grep "Colorspace:" Colorspace: sRGB $ magick example.pdf -colorspace RGB -colorspace sRGB -verbose info: | grep -A1 "Profiles:" $
변환 시 약간의 반올림 오류가 발생할 수 있지만 이미지는 거의 동일하게 보입니다.
프로필을 제거하는 다른 방법은 간단히 다음을 사용하는 것입니다 -strip
.
$ magick example.pdf -strip -verbose info: | grep -A1 "Profiles:"
$
그러나 해당 옵션은 모든 프로필뿐만 아니라 추가 메타데이터도 제거하므로 바람직하지 않은 동작일 수 있습니다. 보다https://imagemagick.org/script/command-line-options.php#strip자세한 내용은.
저장하기 전에 이미지에서 ICC 프로파일을 구체적으로 제거하려면 다음을 사용할 수 있습니다 +profile icc
.
$ magick example.pdf +profile icc -verbose info: | grep -A1 "Profiles:"
$
또는 처음부터 입력 파일에서 ICC 프로파일을 읽지 않으려면 다음을 사용할 수 있습니다 -define profile:skip=icc
.
$ magick -define profile:skip=icc example.pdf -verbose info: | grep -A1 "Profiles:"
$
이 설정은 영향을 미칩니다.독서이므로 입력 파일 앞에 넣어야 합니다.
ICC 프로필을 유지하고 회색조 PNG로 저장하지 않음
마지막으로 프로필을 유지하려면 -define png:color-type=
원하는 PNG를 설정하는 데 사용할 수 있습니다.색상 유형회색조로의 자동 변환을 방지하여 경고를 방지합니다. 예제 파일의 경우 색상 유형 6인 "Truecolour with alpha"를 원할 수 있습니다.
$ magick example.pdf -define png:color-type=6 output.png
$ magick output.png -verbose info: | grep "color_type"
png:IHDR.color_type: 6 (RGBA)
$
또는 예를 들어 출력 접두사를 사용할 수 있습니다 PNG32:
.
$ magick example.pdf PNG32:output.png
$ magick output.png -verbose info: | grep "color_type"
png:IHDR.color_type: 6 (RGBA)
$
두 경우 모두 경고가 표시되지 않지만 ICC 프로필은 유지됩니다.
$ magick output.png -verbose info: | grep -A1 "Profiles:"
Profiles:
Profile-icc: 2576 bytes
$
ImageMagick의 GitHub 토론 페이지에서 이 문제에 대한 자세한 내용을 읽을 수 있습니다.https://github.com/ImageMagick/ImageMagick/discussions/2730그리고https://github.com/ImageMagick/ImageMagick/discussions/6292탁월한 지원을 제공합니다.