Images
在將 TIFF 轉換為 PNG/JPG 時指出我的錯誤
這是輸入的 tiff 圖像,我想將其轉換為 JPG/PNG。googledrive 連結到下載範例
作為一般經驗法則,我總是使用以下命令在 2 種圖像格式(主要是 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;
重要的
YCbCr
一點是:該色彩空間(它是影片色彩空間,而不是 RGB)沒有被轉換,因此您生成的 PNG 在某處有色彩空間註釋,而您的 PNG 查看器不遵守此註釋,或者您的convert
有錯誤並且沒有t 進行色彩空間轉換,即使它需要。
convert
有-colorspace
選項,所以我要嘗試的第一件事是明確設置源顏色空間和目標顏色空間,看看它是否以這種方式轉換它們。此外,由於輸入圖片似乎是黑白的,請考慮轉換為灰度 PNG(只需要 Y 或強度通道)。
由於色彩空間資訊是 TIFF 的一部分(這部分是 T 代表的:文件中有關於圖像結構的實際資訊,它被標記為 ),這意味著您的轉換做錯了什麼(或者,您的輸入文件以您的其他觀眾可以“錯誤地”處理“成功”的方式被破壞)。
因此,解決方法:不要使用
convert
/imagemagick(這也是 Web 歷史上最大的伺服器漏洞來源之一)。無論如何,根據我的經驗,它的速度非常慢。
econvert
從ExactImage項目中嘗試。除此之外,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}")