>  기사  >  백엔드 개발  >  이미지를 사용할 때 색상이 잘못되었습니다. JPEG를 디코딩하고 PDF에 쓰려면 디코딩하시겠습니까?

이미지를 사용할 때 색상이 잘못되었습니다. JPEG를 디코딩하고 PDF에 쓰려면 디코딩하시겠습니까?

PHPz
PHPz앞으로
2024-02-08 22:40:121059검색

使用 image.Decode 解码 JPEG 并写入 PDF 时颜色不正确?

PHP 편집자 Zimo는 image.Decode를 사용하여 JPEG를 디코딩하고 PDF에 쓸 때 문제가 발생했습니다. 즉, 색상이 잘못되었습니다. 이 문제는 색 공간 불일치로 인해 발생할 수 있습니다. JPEG 이미지를 디코딩할 때 이미지의 색상 공간이 PDF의 색상 공간과 일치하는지 확인해야 합니다. 그렇지 않으면 잘못된 색상이 발생합니다. 이 문제에 대한 해결책은 image.DecodeConfig 함수를 사용하여 JPEG 이미지의 색상 모드를 가져온 다음 이를 PDF의 색상 공간과 일치시켜 일관성을 보장하는 것입니다. 또한 다른 이미지 처리 라이브러리를 사용하거나 이미지의 색상 공간을 조정하여 이 문제를 해결할 수도 있습니다.

질문 내용

image.decode() 方法解码图像文件(png、jpg、gif 和 bmp 格式)来创建 pdf,以获取 image.image을 사용해 보았습니다. 그런 다음 픽셀 데이터를 PDF 스트림에 쓴 다음 압축합니다. 내가 겪고 있는 문제는 JPEG를 디코딩할 때 결과 PDF의 색상이 올바르지 않다는 것입니다. 다른 모든 이미지 형식은 예상대로 작동합니다. 문제의 스크린샷을 첨부했습니다.

스크린샷: https://i.stack.imgur.com/e3hc8.png

이 문제의 원인을 아시는 분 계신가요? image.decode()를 사용할 때 JPEG를 다르게 처리해야 하는 구체적인 방법이 있나요? 이 문제를 해결하는 방법에 대한 제안을 보내주시면 감사하겠습니다!

편집자:

코드:

으아악 으아악

jpeg.decode을 직접 사용하면 PDF의 결과 이미지가 동일하게 보입니다.

생성된 PDF의 이미지가 원본 png와 동일하게 보이길 원하지만 품질이 약간 저하될 수 있습니다.

원본 png: https://i.stack.imgur.com/rnkgq.png

변환된 jpg: https://i.stack.imgur.com/yj69y.jpg

다른 jpeg에도 동일한 문제가 있습니다. 예를 들어 w3c의 첫 번째 테스트 jpeg https://www.w3.org/markup/test/xhtml-print/20050519/tests/a_2_1-bf-01.htm

해결책

color.rgba() 返回 alpha 预乘颜色分量0..0xffff 제품군.

byte(r) 这样的值转换为 byte 将保留其最低 8 位,与原始值相比,这似乎只是随机的。您需要一个 8 位颜色分量,不要将其转换为 byte과 유사하지만 대신 상위 8비트를 사용합니다. 이는 오른쪽으로 8로 시프트(또는 256으로 나누기)를 의미합니다.

으아악

png와 gif에서는 작동하지만 jpeg에서는 작동하지 않는 이유에 대한 설명:

png 및 gif 이미지 디코딩에서는 color.rgba的图像模型> 颜色模型,使用 8 位值存储组件。但其 rgba.rgba() 메서드를 사용하여 원래 8비트 값을 복사하여 이러한 값을 16비트 값으로 변환할 수 있습니다.

으아악

즉, 하위 8비트를 취하면 상위 8비트를 취한 것과 동일한 원래 값을 얻게 된다는 뜻입니다. JPEG 이미지를 디코딩하면 이 "구현 동작"을 재현하지 않는 color.ycbcr 색상 유형을 사용할 수 있습니다.

이것에 의존하지 마세요. 16비트 구성 요소 중 8비트 구성 요소가 필요한 경우 항상 상위 8비트를 사용하십시오.

위 내용은 이미지를 사용할 때 색상이 잘못되었습니다. JPEG를 디코딩하고 PDF에 쓰려면 디코딩하시겠습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 stackoverflow.com에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제