입력된 TIFF 이미지인데 JPG/PNG로 변환하고 싶습니다.googledrive-다운로드 샘플 링크
일반적으로 저는 두 가지 이미지 형식(주로 JPG에서 PNG로)을 변환할 때 항상 다음 명령을 사용합니다.convert input.jpg out.png
하지만:
convert input.tiff out.png
다음 이미지를 생성합니다. TIF를 PNG로 변환하는 것이 작동하지 않는 이유를 지적할 수 있습니까? 이것이 색 공간/압축과 관련이 있습니까?
혹시라도 : $identify input.tiff
주어진
input.tiff TIFF 640x480 640x480+0+0 8-bit YCbCr 619120B 0.000u 0:00.000
또한 이미지를 만드는 방법에 대한 자세한 내용은 다음과 같습니다.
ffmpeg -hide_banner -loglevel error -y -f video4linux2 -i /dev/video0 -vframes 1 fname.tiff;
답변1
중요한 점은 YCbCr
색상 공간(RGB가 아닌 비디오 색상 공간)이 변환되지 않기 때문에 생성된 PNG에 색상 공간 주석이 어딘가에 있고 PNG 뷰어가 이 주석을 지원하지 않거나 PNG에 convert
문제가 있어 지원하지 않는다는 것입니다. 필요한 경우에도 색 공간 변환을 지원합니다.
convert
옵션이 있으므로 -colorspace
가장 먼저 시도한 것은 소스 및 대상 색상 공간을 명시적으로 설정하고 해당 방식으로 변환되었는지 확인하는 것이었습니다.
또한 입력 이미지가 흑백으로 나타나므로 회색조 PNG로 변환하는 것을 고려하십시오(Y 또는 강도 채널만 필요함).
답변2
색 공간 정보는 TIFF의 일부이므로(이 부분은 T의 약자입니다. 파일에는 이미지 구조에 대한 실제 정보가 있으므로두드러진), 이는 변환을 잘못하고 있음을 의미합니다(또는 다른 뷰어가 "성공"을 "잘못" 처리할 수 있는 방식으로 입력 파일이 손상됨).
따라서 해결책은 다음과 같습니다. convert
/imagemagick(웹 역사상 가장 큰 서버 취약점 소스 중 하나)을 사용하지 마세요. 어쨌든 제 경험으로는 속도가 매우 느립니다.
그 외에는 Python PIL/Pillow가 제대로 작동할 수 있습니다. 이것이 실제로 첫 번째입니다.튜토리얼의 예(최소 수정) 텍스트 파일에 저장하고 실행 파일로 표시한 후 파일에서 사용하세요.
#!/usr/bin/env python3
import os, sys
from PIL import Image
for infile in sys.argv[1:]:
filename, extension = os.path.splitext(infile)
outfile = f"{filename}.jpg"
if infile != outfile:
try:
with Image.open(infile) as im:
im.save(outfile)
except OSError:
print(f"cannot convert {infile}")
답변3
내가 찾은 해결책은 먼저 다음을 사용하여 YCbCr
변환 하는 것입니다.RGBA
tiff2rgba. ( libtiff
패키지에 포함되어 있음). 그런 다음 해당 RGB tiff를 다른 형식으로 변환하십시오.
$ tiff2rgba input.tiff out.tiff
$ convert out.tiff final.png
추가 정보:
$ identify input.tiff
input.tiff TIFF 640x480 640x480+0+0 8-bit YCbCr 618733B 0.000u 0:00.000
$ identify out.tiff
out.tiff TIFF 640x480 640x480+0+0 8-bit sRGB 858070B 0.000u 0:00.000
imagemagick
없이 그냥 사용하는 등 더 간결한 답변이 있거나 tiff2rgba
왜 이런 일이 발생하는지 알고 있다면 자유롭게 공유해 주세요. 감사해요.