ImageMagick 範例 --
常見影像格式
許多影像檔案格式都有其特殊性,在使用這些格式時需要牢記。本頁將探討這些特殊需求,以及改進這些格式結果的方法。
如您所見,此影像使用了透明的灰色(「
如您所見,即使影像已被修改(所有「
如果您想更改 GIF 檔案格式使用的透明顏色,可以使用「
如您所見,即使結果與原始圖像沒有明顯差異,透明顏色也已更改為「
請注意,設置「
如您所見,左側繪製的圓圈邊緣(以 PNG 格式)是圖像中非常乾淨(儘管略微模糊)的邊緣。 您可以在其放大圖中看到半透明像素。 現在讓我們使用「GIF」圖像格式輸出相同的圖像...
結果是圓圈沿外緣具有非常明顯的階梯效應,而內部仍然保持適當的反鋸齒。 基本上,雖然 PNG 格式可以保存半透明像素信息,但 GIF 不能。 GIF 圖像格式只能保存單一純透明顏色。 換句話說...
您可能會想要自己進行臨界值處理,如果您不確定正在使用哪個版本的 IM(尤其是舊版本),則建議您這樣做。
如果您只是將這封信直接轉換為 GIF 格式,或者甚至使用「
第一個圖像是正常保存為 GIF 格式,如您所見,它在「
針對 GIF 布林透明度問題的大多數其他解決方案是將圖像與其所在的網頁背景顏色密不可分地聯繫在一起。這樣做的方法複雜且棘手,這也是我們現在要探討的內容。
看起來簡直完美!當然,要讓這個方法正常運作,您需要確切知道圖像將在其上使用的背景顏色。此外,在我們完成後,圖像在任何其他背景上都不會很好看。這是一個很大的犧牲。
我已經設置了網頁,以便將我們的圖像覆蓋在該背景上,即使該背景本身並不是圖像的一部分。儘管使用的背景顏色與背景圖案的整體顏色相匹配,但它周圍仍然有一個非常明顯的純色矩形,沒有背景圖案。一種實用的解決方案是將我們覆蓋的顏色聲明為 GIF 輸出中的「
這通常足以處理大多數 GIF 圖像中的透明度,儘管它確實將圖像與特定的背景顏色聯繫在一起。從本質上講,我們是使用透明度來設置圖像的基本輪廓形狀,而不是真正的透明度。通過使用與背景圖案相匹配的顏色來進行覆蓋和 GIF 透明度,我們不再清楚圖像在哪里停止,背景圖案在哪里開始。
但是,請謹慎使用「
如果您在圖像本身中使用了接近背景顏色的顏色,它也會失敗。因此,不建議將此技術用於一般圖像,而僅在特定情況下使用。為了解決這個問題,我們使用“
現在,只要我們的圖像邊界沒有“洩漏”,我們就可以在圖像內部使用與背景相似的顏色,並且由於“過度模糊”,它們不會變成透明的。當然,如果我們的圖像中有“孔”,那麼這些孔也必須處理。在這種情況下,以前的“模糊透明度”可能會更好地工作。我確實說過處理 GIF 透明度顏色很容易!才不是呢!
另一種技術,特別是對於具有銳利抗鋸齒邊緣的圖像,是簡單地添加最小輪廓的背景顏色。請參閱 輪廓或光暈透明度。
移除背景顏色...嘗試移除既有 GIF 圖像的特定背景顏色並不容易。如果重疊的圖像也包含背景顏色,這將會特別困難,因為您將無法真正知道哪些是背景,哪些不是。最好的解決方案是取得相同 GIF 重疊在兩種不同且已知背景顏色上的副本。透過兩個這樣的圖像,您可以完美地恢復原始重疊及其所有半透明像素。請參閱使用兩個背景移除背景。如果您沒有兩個這樣的圖像,則無法完美地恢復圖像的半透明度,但是有一些技術可以完成合理但不完美的工作。如需詳細資訊,請參閱背景移除的其他章節。
類似地,還有其他一些抖動運算符可以使用「
![[IM Output]](a_ordered_4x4.gif)
![[IM Output]](a_halftone_8.gif)
如您所見,「
另一方面,「
您可以透過使用較暗的中間色調顏色(例如深灰色)而不是黑色作為陰影顏色來改善最終外觀。透過這樣做,顏色將更容易融入背景中,使抖動比上面顯示的更不明顯。如果您大致知道背景顏色是什麼,您甚至可以使用該陰影的較深顏色來使陰影更好地彎曲,而不必局限於特定的背景陰影。稍微混合這兩種方法可以改善整體效果。基本上,您為想要做的事情投入越多精力,結果就會越好。
如果 JPEG 影像經過變更,導致頂部或左側邊界的變更量不是 8 的倍數,則這種失真行為會變得更加明顯。發生這種情況時,JPEG 壓縮「區塊」或「單元」將完全不同,這可能會導致最終影像儲存大小大幅增加。也就是說,像是裁切、修剪、削邊、加框、擴展等操作(請參閱裁切和加框操作)可能會將影像資料偏移非 8 的倍數個像素。如需更多詳細資訊,請參閱 IM 論壇討論裁切影像導致檔案大小意外增加。
一般來說,JPEG 資料這種「失真」的特性並不明顯。但是,當您多次載入和儲存 JPEG 影像,或對顯示明顯顏色變化的圖表使用非常低的品質時,就會變得明顯。但是,只要您沒有重複載入或重複使用 JPEG 影像(從原始來源保留和套用操作),它仍然是一種良好的檔案格式,即使是它不擅長處理的影像類型也是如此。作為這種失真 JPEG 特性的範例,我在這裡產生一個由兩個漸層拼接在一起的簡單影像。雖然漸層提供了 JPEG 可以很好處理的平滑顏色變化,但兩個漸層之間的明顯顏色變化處理得並不好。
第一個影像是未失真 GIF 格式版本影像的放大檢視(點選影像以檢視或下載未放大的檢視)。它只包含 20 種顏色,因此在這種情況下,GIF 格式可以完美處理影像,並且實際上會產生非常小的檔案大小(請參閱下表)。另一方面,JPEG 版本的影像顯示了 JPEG 壓縮添加到儲存影像中的明顯顏色失真,以便更好地壓縮它。失真在藍色通道中最嚴重,這並不奇怪,因為人眼無法很好地分辨藍色。也就是說,人眼傾向於自然地「散佈」藍色,因此 JPEG 演算法利用了這一點(通過內部使用 YCbCr 色彩空間)。事實上,如果沒有上面使用的放大倍率,您將很難看到這種效果。讓我們來看看品質對影像的影響。
如果您仔細查看上面第一個影像結果,我們將測試影像以「
如您所見,此圖像默認在一個大的矩形區域中有 216 種顏色。這種类型的圖像不太適合保存為 JPEG 格式,這使其成為我們測試目的的理想選擇。所以讓我們看看保存此圖像的 JPEG 圖像產生了多少種顏色...
也就是說,默認情況下,保存的 JPEG 文件的顏色數量幾乎是原來的 9 倍!雖然結果看起來仍然與原始圖像相同,但矩形區域的邊緣會添加鄰近的顏色。以最高品質設定保存並*不會*在没有任何色彩失真的情況下保存圖像...
如您所見,非常高的品質設定只會添加一些額外的顏色,但圖像仍然會有一點(輕微的)色彩失真。您還可以發現文件大小更大,因為幾乎無法實現壓縮。現在讓我們試試「無損」...
仍然有色彩失真!顯然我的 JPEG 函式庫沒有針對無損編碼進行修補。但是請記住,只有另一個經過修補的函式庫才能讀取這種無損 JPG 圖像。或者,我建議您編譯您的 IM 以使用 JasPer 函式庫和更新的 JP2 圖像文件格式。
如您所見,Jpeg2000 格式切換到其他無損圖像壓縮方法,但默認情況下不會扭曲圖像顏色。它還對圖像執行一些非常高的壓縮方法。但是,與普通的 JPEG 圖像文件格式一樣,對新的 JP2 格式使用較低的品質將再次引入色彩失真,以便生成更小的圖像...
有關使用 JPEG2000 編碼器的更多信息,請參閱JPEG2000 編碼參數文檔。
如您所見,這些程式大多設計用於處理 JPEG 影像中繼資料,而無需重新處理 JPEG 壓縮影像。(請參閱下一節)
縮圖... Brian Jackson <brian@brianjacksonphoto.com> 也報告說,大多數數位相機(例如他的佳能 1D)會在生成的 JPEG 影像中嵌入大小介於 12kb 到 25kb 之間(160x120 像素)的縮圖。IM 可以使用以下方法提取這些縮圖...
但是,程式「
與 IM 相比,這速度超級快,因為它不會編輯影像,只是傳輸現有資料。但是,縮圖的品質不如 IM 從真實影像生成的縮圖好,而且它們的旋轉方向可能也不正確,而且肯定不會是您想要的大小。使用 ExifTool... Rob 表示,如果您想要對儲存在 JPEG 影像檔案中的設定檔進行比「
花了一些時間才弄清楚,因為事實證明您需要先使用 SetNewValue 分配設定,然後使用 WriteInfo 同時載入和儲存。使用 JpegTrans 混合 JPEG 品質影像... Wolfgang Hugemann {Auto@Hugemann.de} 希望 JPEG 影像的邊緣完全不被壓縮,因為這會影響照片處理。請參閱這個網站。Yuval Levy <imagemagick07_AT_sfina.com> 提供的解決方案是使用「
如果您有一個具有二元(開啟/關閉)透明度的 ImageMagick 影像,PNG 編碼器將會使用 tRNS 區塊而不是完整的 Alpha 色板,以有效率的方式寫入它。但如果出現任何不是 0 或 MaxRGB 的不透明度值,它將會寫入一個具有 Alpha 色板的 PNG。您可以使用「
您也可以透過使用較少的顏色數量來改進壓縮演算法的結果,從而改進 PNG 影像的最終大小。
然而,這僅建議用於不涉及透明度的小縮圖,並且僅作為最後一步,因為這是一種非常「失真」的技術。
請注意,如果您的瀏覽器支援透明度(或頁面上的特殊 JAVA 指令碼),則圖片看起來應該仍然正確。
但請注意,這並不會修改半透明像素,這些像素仍將保留其正常的(非透明)顏色,而不會將該顏色與頁面背景或用於完全透明度的顏色混合。由於不再涉及半透明度,因此邊緣看起來可能會呈鋸齒狀(鋸齒),並且沿著較淺的顏色邊緣會出現「光暈」效果。例如,請查看黑白圓圈的邊緣,這些邊緣顯示了「鋸齒」鋸齒效果。但是,使用灰色替換顏色應該不會像最初用於完全透明度的「黑色」那麽糟糕。設定完全透明像素顏色的另一個優點是改進了資料壓縮。有時,處理過程中使用的透明區域中的底層顏色會被保留。這些顏色反過來又不如純色壓縮得好。因此,如上所述設定完全透明顏色可以在最終檔案大小方面節省大量空間。但是,這應該作為最後一步完成,因為許多 IM 圖片處理操作會將圖片中存在的任何完全透明顏色替換回完全透明的黑色。有關已知會執行此操作的運算子清單,請參閱 Alpha 背景 運算子。對於 PNG 顯示問題,我傾向於讓 Microsoft 修正 IE,而且 IE 版本 7 似乎最終將在所有情況下都能完全處理 PNG 透明度。
但是,即使 PNG 格式通常不會儲存畫布大小資訊,IM 確實會將一些虛擬畫布大小中繼資料新增至 PNG 圖片。但是,這些資料只能由 IM 命令使用,其他 PNG 圖片格式讀取器通常會忽略這些資料。例如,第二個「
如果 PNG 由某些非 IM 程式處理,則此畫布大小中繼資料可能會遺失。請記住,畫布大小資訊通常不是 PNG 圖片檔案格式的一部分。另一件需要注意的事情是,「偏移」資訊可以具有負偏移(與 GIF 格式不同),IM 將適當地處理這些偏移,使該格式非常適合儲存中間 圖層圖片。
如需更多資訊,請參閱影像類型輸入/輸出設定。
您可以強制 IM 建立影像色彩索引表(或調色盤),然後 IM 會使用「
若要強制使用單一 8 位元灰階通道,但不使用調色盤索引影像,請使用...
您也可以(從 IM v6.3.5-9 開始新增)輸出具有透明度通道的灰階影像。
而對於簡單的雙色影像,請使用...
PNG24 影像存在一種特殊情況。如果影像只包含布林透明度,並且所有透明色彩都相同,而且該色彩只用於透明度,則 PNG 編碼器會將該特定色彩指定為透明。例如...
此影像沒有調色盤,但有一些開/關 Alpha。Alpha 色版的-threshold可確保只有布林(開/關)透明度存在,而Alpha 背景選項可確保所有完全透明的像素都是特定的色彩。以上並不能確保沒有該色彩的不透明像素,因此以上操作仍然可能失敗。
這些方法大多數都是為了使用有損或無損技術來改善圖像文件的最終大小。
常見的配置文件(以及我對它們的資訊指針)包括...
上面的“
也就是說,文件“
將 CMYK 轉換為 RGB JPEG 的最佳解決方案是使用帶有「
但是,如果圖像沒有(或者你知道它是一個沒有現有配置文件的 RGB 圖像),你可以使用...
這會將生成的圖像設置為 CMYK USCoat.icm 配置文件。另一個 CMYK 配置文件是 SWOP.icm 配置文件。對於反向操作(圖像已經有一個配置文件),請使用...
警告:如果原始圖像已經包含一個配置文件,例如 CMYK 配置文件,那麼進行兩次配置文件轉換是一個壞主意。例如
將會導致 CMYK -> CMYK -> RGB 的轉換。但由於 CMYK 並非對稱的,因此額外的轉換步驟可能會導致嚴重的色彩轉換問題。(請參閱 IM 論壇討論 關於 ICC 設定檔轉換行為的問題)
這將使用感知渲染意圖進行處理,這是預設值(有關渲染意圖的詳細說明,請參閱 色彩空間轉換)。由於感知渲染意圖的結果可能會因用於建立 ICC 描述檔的軟體而異,因此您可以使用「
您可以從 國際色彩聯盟 下載色彩描述檔。
如果影像包含描述檔,您可以使用它儲存影像,以便將該描述檔添加到其他類似的影像中
或者,您可以提取描述檔的文字版本進行編輯
例如,以下是 fcaserio 在 IM 論壇 中提供的描述檔。您可以使用以下指令將此描述檔添加到影像中
該影像可以轉換為包含 TIFF 預覽的 EPS(封裝式 PostScript)(EPT),其中也包含 IPTC 描述檔。(感謝 Tee Tanne)。
為什麼這很重要?因為 IM 是一個「點陣圖像處理器」,雖然它可以讀取或寫入以其中一種向量格式存儲的圖像,但它是通過在內部點陣圖像之間來回轉換圖像來實現的。 因此,如果您嘗試使用 IM 將圖像從一種向量格式轉換為另一種向量格式,IM 本質上會以當前定義的分辨率或密度對該圖像進行點陣化,這希望(但不太可能)適合您打算在其上使用的輸出設備。 換句話說,IM 的任何輸出都永遠不會是真正的向量格式。 雖然它可以將其內部點陣格式轉換為向量格式文件,但結果只是一個圍繞點陣格式圖像的表面向量圖像包裝器。 除非為輸出設備正確定義了點陣圖像(以正確的分辨率),否則結果將不會特別好。 不幸的是,IM 的新用戶對此一無所知。 他們將 IM 視為可以將 PDF 轉換為 Postscript 的轉換器,從而在預期輸出設備上產生具有「塊狀」鋸齒效應、「褪色」顏色或根本不好看的模糊圖像。 這就引出了我要說的...
**Windows 和 Ghostscript** 要稍微複雜一些,因為它需要使用 Windows 註冊表。
有沒有人想嘗試建立委派?請告訴我們!您也可以嘗試使用「
這兩個命令產生的 PDF 文件比直接轉換黑白頁面要小得多。然而,哪個更小取決於圖像,並且在不嘗試和測試結果大小的情況下無法確定。
不幸的是,它不適用於 IM 創建的默認 PDF。 -- Sebastian Krause,來自 IM 用戶郵件列表 多頁 PDF 文檔... 您可以使用 perl 組合多個 PDF 文件,而無需求助於 IM 及其柵格化問題...
另請參閱 調整大小的漸變,其中 NetPBM 文字影像用於建立非常小(2 到 4 個像素)的影像。以上內容還展示了「ASCII」子格式的用途。特別是作為將影像添加到 Shell 腳本中的一種方式,或者作為從數字陣列生成影像的一種手段。例如,請參閱 TXT:列舉像素格式。在 直方圖重新分佈方法 範例中顯示了這種用法的一個範例。
請注意,當輸出為純文字時,行不會與影像行長度對齊。但您可以使用各種 UNIX 文字工具程式重新格式化輸出。例如,您可以使用 "
有關更多詳細資訊,請參閱 寫入或剪切遮罩。
這將返回...
當 IM 使用 委託(使用「
「
以上指令會產生一張徑向漸層圖,然後複製並調整它以建立紅色到更亮紅橙色的脈衝。接著複製這個脈衝以建立反向的巡邏循環,最後建立一個 30 秒、循環播放的 MNG 動畫。可惜的是,目前大多數網頁瀏覽器不支援 MNG,而且許多影片播放器只會播放循環動畫一次。如果您點擊上面遺失的影像影格,則可以下載動畫並使用 IM 動畫指令觀看。如需 MNG 格式的詳細資訊,請造訪MNG 網站。
對構成電影或動畫序列的數千個檔案中的每一個執行此命令顯然需要很長時間。可以使用 ImageMagick 的簡單腳本自動遞增序列中每個影格的時間碼。例如,請參閱 Perl 腳本dpx_timecode.pl。
以上內容的副本已添加到主要的 IM 文件中,網址為 動態影像格式簡介。以上內容由 Seth Dubieniec <seth.info_AT_dubieniec.co.uk> 提供,摘錄自 IM 論壇上關於 DPX 格式的長期討論。他目前正在開發 DPX 應用程式,因此未來可能會提供更多 DPX 相關資訊。
需要使用「
「
將原始 RGB(或 GRAY)資料讀入 ImageMagick 時,您需要指定影像的大小。 例如..
這將精確定義 Imagemagick 將讀取的資料量。 有時,原始資料可能會附加一些額外的標頭資訊。 若要讓 IM 跳過此資訊,您可以在「
據我所知,這是 IM 唯一會使用「
常見影像檔案格式簡述
如需讀取和寫入影像格式的介紹,請參閱影像檔案格式。雖然所有 ImageMagick 檔案格式的清單都可以在IM 影像格式頁面上找到。以下是常見「標準」影像檔案格式的快速摘要,以及它們的優缺點...- GIF
- 這種格式極為常見,而且存在已久,以至於所有影像處理程式都能理解它。但它只使用有限的顏色數量(256 色表格),並且只能以 8 位元品質儲存。然而,其內建的行程編碼允許它非常有效地儲存只有少數顏色的影像。雖然此格式支援透明度,但它只理解布林(開啟/關閉)透明度,因此會產生「鋸齒」或「階梯狀」現象。以透明 GIF 影像儲存時,具有細線的純文字會嚴重失真。解決此問題的唯一方法是將 GIF 影像與使用它的網頁的特定背景綁定。GIF 格式可以儲存多個影像以形成動畫序列,並且為此目的也儲存影像畫布大小和偏移(頁面)資訊。但請注意,不支援負偏移量,嘗試這樣做會將偏移量重置為零。它最適合用於卡通、線條圖和小圖示的小型影像,這些影像的顏色都有限,並且可以讓它很好地壓縮。但是,當可以使用 PNG 等較新的格式時,應避免使用它。
- JPEG
- 完全不處理透明度。該影像相當於使用 "
-alpha off
" 操作來移除 Alpha 色板,因此任何背景透明度通常會變成黑色,具體取決於用於產生影像的影像處理方式。這種格式也是「有損」的,會在銳利的線條和邊緣上產生邊緣效應,因此不應將其用於任何中間影像處理或影像原件的儲存(除非它們已經是這種格式)。它非常適合長期儲存真實照片,但如果您打算進一步處理影像或影像包含大面積的純色,請避免使用它。 - PNG
- 這種格式旨在最終取代 GIF 和 TIFF 等舊格式。它是一種現代格式,能夠處理具有四個顏色通道的 16 位元品質,允許充分利用半透明顏色。它還包括大量的無損影像壓縮選項。它最大的缺點是它仍然相對較新,因此 Microsoft IE(v6)網路瀏覽器無法自動正確處理它。但是,可以解決這個問題。該格式不儲存畫布大小資訊(而 GIF 會儲存),但它確實儲存畫布偏移量,甚至負偏移量(而 GIF 不會),儘管某些網路瀏覽器在使用負偏移量時會出現問題,因此不建議對要在瀏覽器中顯示的最終影像使用此選項。對於儲存中間「分層」影像,儲存負偏移量的能力可能非常重要,而且通常比不儲存畫布大小資訊更重要。
- MNG
- 這是 PNG 的多影像格式,允許動畫達到電影品質的水平和速度。_需要一個使用 MNG 的簡單範例,如果您有,請發送給我。_MNG 動畫格式似乎正在過時,並且已被一些網路瀏覽器(如 FireFox)放棄。
- TIFF
- 這是在任何嚴格的圖像格式出現之前,為了在程序之間傳輸高品質圖像而開發的圖像交換格式。不幸的是,由於這個開端,該格式被修改成具有隨機排列的功能和壓縮樣式,並且沒有程序完全理解它們。現在,該格式幾乎只在 Windows 平台上的「
Photoshop
」中使用,這是唯一提供任何 TIFF 圖像格式標準參考的來源。TIFF 文件可以處理多個圖像,但除了 IM 之外,很少有應用程序可以處理多圖像 TIFF。一般來說,除非 TIFF 圖像的內部格式保持相對基本,否則無法保證由一個程序生成的 TIFF 文件可以被另一個程序使用,包括 IM 甚至「Photoshop
」本身。因此,我不推薦使用這種格式!我建議您使用 TIFF(或 JPEG)以外的其他格式,尤其是用於長期存儲圖像。我在其他格式、TIFF部分提供了一些關於這種格式及其問題的說明。這些使用說明是在 IM 郵件列表和論壇中找到的,因為我自己不使用也不需要使用 TIFF。 - 影片格式
- 其他電影品質的動畫格式通常基於使用有損壓縮來減小電影的大小(和品質)。這兩種格式都處於不斷變化、改進和安全限制功能的狀態,這使得任何形式的處理都很困難。據最新統計,有超過 200 種視頻格式「編解碼器」在實際應用中用於各種目的。因此,IM 並不直接處理這種格式,而是依靠其他軟體包來處理動畫中單個幀的輸入和輸出。這些「委託」程序包括「
mpeg2decode
」、「mpeg2encode
」和「mplayer
」。請參閱下面的MPEG、M2V 和 AVI。
![]() ![]() |
某些系統(如 Ubuntu)使用安全策略禁用特定的圖像文件格式。鍵入 magick -list policy 可以查看系統上存在哪些策略以及它們的設置位置。 |
GIF 圖像文件格式
GIF 格式是一種廣為人知的圖像文件格式,因為它已經存在很長時間了(從 1980 年代後期開始)。它通常被選用於要在網頁上顯示的圖像,這些圖像涉及透明度或圖像動畫。它也是所有網頁瀏覽器都能完全理解的唯一格式。不幸的是,除了線條圖、圖形、示意圖和卡通以外,它並不是一種很好的格式。這是因為它最多只能使用 256 種顏色,其中一種顏色通常被標記為透明色。將圖像中的一種特定顏色標記為透明色有一些缺點。如果選擇的透明色不當,可能會導致圖像的其他部分變得透明,而這並非預期結果。必須小心確保不會發生這種情況。此外,透明度功能是「布林值」,這基本上意味著它要麼完全開啟,要麼完全關閉。半透明顏色是不可能的,如果存在,則需要將其設置為透明或不透明。這意味著該格式無法提供任何形式的圖像邊緣反鋸齒,通常會導致嚴重的「鋸齒」現象。(請參閱反鋸齒)由於「GIF」圖像格式的顏色限制會導致許多問題,尤其是對於像 ImageMagick 這樣的高品質圖像處理軟體包而言,我想先說清楚...
盡可能避免使用 GIF 格式。
如果必須使用它,請僅將其作為最後一步。
長期以來,GIF 使用的壓縮演算法一直受到專利保護。因此,許多影像處理程式(例如 ImageMagick)無法使用它。因此,非常舊的 IM 程式會輸出未壓縮的 GIF 格式影像,因此使用的磁碟空間會比應有的多。您可以使用 GIF 批次壓縮程式(例如「如果必須使用它,請僅將其作為最後一步。
Gifsicle
」或「InterGIF
」)來解決這個問題。然而,由於該專利已於 2004 年年中完全到期,因此目前發行的 IM 已重新啟用 GIF 影像壓縮功能。影像壓縮也很簡單,並且最適合具有大面積純色和不變顏色的影像。或者,簡單重複相同顏色集的圖案,例如您使用 有序抖動(不是 IM 中的預設抖動)獲得的圖案。最後,GIF 影像可以在一個檔案中儲存多個影像。這用於產生幾乎所有網路瀏覽器都能理解的 GIF 動畫,因為該技術最初是由非常古老的「Netscape」瀏覽器引入的。總之 GIF 影像檔案格式具有有限的調色盤、布林透明度和簡單的壓縮(如果啟用),使其成為小影像的理想選擇,例如縮圖,尤其是具有大面積純色的「卡通式」圖示、標誌和符號影像。它的動畫功能也使其成為產生您在全球資訊網上看到的華麗、引人注目的標誌和廣告的理想方法。對於其他任何東西,它的局限性使其成為一種糟糕的影像檔案格式,您最好根據您的需要改用 JPEG、PNG 或影片影像格式。GIF 有限色彩表
FUTURE: color reduction examples -- reference basic color dithering Ensuring that a specific color is present in the final GIF image Map color tables to color reduce. See Color Quantization.請參閱 進階 3D 子彈腳本,以獲取在一定顏色範圍內產生多個影像的範例。此技術還可以用於將您的影像自動變魔術為具有許多不同背景顏色和圖案的多個影像。
GIF 透明色彩
例如,在這裡,我們使用 identify 來提取透明顏色,以及特定 GIF 影像檔案用於表示透明度的調色盤。perl 腳本僅提取感興趣的特定欄位(可以是多行)。
|
![]() |
||
|
#CCCCCC00
」),並且此顏色在調色盤中有其自己的獨立條目。您還可以發現,儘管此影像僅使用了 5 種顏色(一種透明),但使用的調色盤是 8 種顏色。這是因為 GIF 檔案格式只能使用大小為 2 的冪的調色盤。也就是說,調色盤的大小始終為 2、4、8、16、32、64、128 或 256 個顏色條目。因此,最後 3 個調色盤條目未使用。實際上,它們只是沒有被引用。在某些情況下,這些未使用的條目可能不是調色盤中的最後三個條目,並且實際上可能包含任何顏色值。您實際上也可以擁有重複的顏色值,儘管 IM 通常會在以某種方式處理影像時移除任何此類重複的顏色條目。從 IM 版本 6.2.9-2(以及某些舊版本)開始,IM 將在讀取、處理和寫入 GIF 影像時保留調色盤,更具體地說是透明顏色值。
|
![]() |
||
|
wheat
」顏色像素都已替換為「white
」顏色),但使用的透明顏色仍被保留。但是,如果最終影像沒有透明度,則調色盤中的透明顏色條目(「Alpha:
」)將被完全移除。
|
![]() |
||
|
-transparent-color
」輸出設定(已新增 IM v6.2.9-2)。例如...
|
![]() |
||
|
wheat
」顏色的完全透明版本。 如果您仔細觀察,您還會發現圖像的顏色表中現在有兩種「wheat
」或「#F5DEB3
」顏色。 也就是一種透明小麥色和一種不透明小麥色。 從 IM 版本 6.2.9-2 開始,這沒有任何問題。 雖然 GIF 圖像文件格式只能定義一種透明顏色。 為什麼要這樣做? 因為一些非常古老的網頁瀏覽器和圖形程序不理解 GIF 透明度。 因此,此選項允許您設置在這種情況下透明區域應使用的顏色。 透明顏色的典型選擇是現代瀏覽器的「white
」,或者更常見的是「grey75
」(「#BFBFBF
」),它是原始「mosaic
」網頁瀏覽器的頁面顏色。 其他流行的透明顏色選擇是「grey
」(「#BEBEBE
」)和「silver
」(「#C0C0C0
」),這是上面「手」圖像使用的顏色。 這顯示了灰度顏色範圍內的特定區域對於透明顏色來說是多麼流行。 未來:添加顏色選擇鏈接。![]() ![]() |
在 IM v6.2.9-2 和「-transparent-color 」輸出設置創建之前,IM 通常會將圖像的透明度保存為特殊顏色「none 」(完全透明的黑色),當透明度失敗時,這並不是特別好。 |
-transparent-color
」不會為 GIF 圖像添加任何透明度,也不會將指定的顏色變為透明。 該選項所做的只是指定應該在顏色表中為用於表示 GIF 圖像中透明顏色的顏色索引放置什麼顏色。 如果要將特定(精確)顏色更改為透明,請使用「-transparent
」顏色替換運算符。 GIF 布林透明度
因為 GIF 格式不理解半透明顏色,並且 ImageMagick 默認情況下會生成半透明顏色作為其正常反鋸齒方法的一部分,所以當您將圖像保存為此格式時,它通常會看起來很糟糕。 例如,我在這裡在透明背景上繪製了一個簡單的黑色圓圈。 此外,我將生成圖像邊緣的放大視圖,以清楚地說明正在發生的事情。 首先,我將使用 PNG 格式輸出...
|
![]() ![]() |
|
![]() ![]() |
GIF 格式具有開/關或布爾透明度
如果您更仔細地觀察生成的 GIF,您會發現半透明像素可能會變成完全透明或完全不透明。![]() ![]() |
ImageMagick 實際上對半透明像素的處理方式取決於您使用的 IM 版本。 很長一段時間以來,它都沒有被正確定義,一個版本的確切行為通常取決於由於用戶的錯誤報告而應用的最後一個「錯誤修復」。 從 v6.2.9-6 開始,ImageMagick 默認情況下應針對 GIF 和 XPM 圖像格式以 50% 的級別對圖像進行閾值處理。 這已成為圖像處理程序使用的公認標準,同時仍然允許您設置自己的方法來處理 GIF 文件格式的透明度問題。 |
![]() ![]() |
由於 GIF 的限制,IM 在保存為 GIF 文件格式之前執行以下一組操作...
-channel A -threshold 50% if (fully-)transparent pixels are present it then... -quantize transparent -colors 255 otherwise if no transparent pixels present... -colors 256如果圖片中的顏色少於指定的數量,則 -colors 量化程序會自動不做任何處理。如果圖片具有有效的調色板(由「 +/-map 」指定),它也不會執行任何操作。它也不會嘗試為多圖像 GIF 文件使用通用調色板。因此,如果顏色在不同影格之間差異很大,則可能會將本地調色板添加到保存為 GIF 文件格式的每個單獨圖像中。 此外,上述設定不是永久性的,只是針對要保存的圖像暫時有效。也就是說,如果您使用「 -write image.gif 」,則在過程中使用的設定不會影響後續操作。
|
-threshold 50%
」,也就是說,如果像素超過 50% 透明,它將變為完全透明(使用「-transparent-color
」設定指定的顏色,如果已定義)。但是,您現在可以根據需要控制臨界值級別。對於大多數類型的圖像,在 50% 處設定 Alpha 色板的臨界值效果很好。特別是那些具有簡單邊緣的圖像,但是當您需要處理大面積的半透明像素時,該技術會嚴重失效。這就是以下大多數 GIF 處理示例將要探討的內容。例如,假設我們要保存具有較大模糊半透明陰影的圖像,例如這個圖像(PNG 格式)...
|
![]() |
-threshold
」操作來控制布林透明度,您將會大失所望。
|
![]() ![]() |
50%
」處設定半透明像素的臨界值,第二個圖像在「75%
」處設定臨界值,允許更多半透明像素變為完全不透明(或可見)。如果您只想刪除所有半透明像素(例如陰影),您可以嘗試使用「-threshold 15%
」之類的操作,以刪除幾乎所有半透明像素。
|
![]() |
在純色背景上的 GIF
我們真正想要的是以某種方式保留半透明和抗鋸齒像素的陰影,並且仍然在 WWW 上很好地顯示它。為此,我們必須耍點小聰明。典型的解決方案是在將圖像保存為 GIF 格式之前,將其覆蓋在與要顯示圖像的背景顏色相同的背景上。這就消除了對任何形式透明度的需求,並且整個事情都變得不成問題。當然,有限的顏色數量仍然是一個問題,但通常不是一個大問題。
|
![]() |
背景圖案上的 GIF
但是,如果您使用的是某種圖案作為背景,而不是單一的純色,該怎麼辦?您可以嘗試將覆蓋層放置在背景圖案的副本上,以便生成的圖像中的圖案與網頁的圖案相匹配。然而,這將需要大量的試錯才能使圖像中的背景與網頁相匹配。此外,您只能保證它適用於特定的瀏覽器,而且只能保證適用於該瀏覽器的特定版本。對於網頁來說,這不是一個好主意,所以甚至不要嘗試。我當然不會。我們不要試圖與背景圖案進行完美的匹配,而是將其覆蓋在至少與我們打算使用的背景相匹配的顏色上。例如,讓我們將我們的圖像覆蓋在一個“典型”的氣泡狀背景圖案上。但首先,我們需要知道這個背景的平均顏色。一個簡單的方法是將圖像縮放到一個像素,然後讀取得到的顏色。有關使用的特殊「txt:
」輸出格式的更多信息,請參見 IM 像素枚舉文本格式。現在讓我們使用「-flatten
」設置圖像的背景透明度。
|
|
-transparent
」顏色。通過這樣做,我們可以去除圖像的“方形”。此外,添加一個小的 模糊因子 可以改善結果,並調整透明顏色使用的空間量,就像上面的閾值一樣。
|
|
但是,請謹慎使用「
-fuzz
」設置,因為過多的設置會導致圖像的外部區域變得透明!
|
|
-alpha 泛洪填充
”來設置我們想要透明的區域。
|
|
另一種技術,特別是對於具有銳利抗鋸齒邊緣的圖像,是簡單地添加最小輪廓的背景顏色。請參閱 輪廓或光暈透明度。
移除背景顏色...嘗試移除既有 GIF 圖像的特定背景顏色並不容易。如果重疊的圖像也包含背景顏色,這將會特別困難,因為您將無法真正知道哪些是背景,哪些不是。最好的解決方案是取得相同 GIF 重疊在兩種不同且已知背景顏色上的副本。透過兩個這樣的圖像,您可以完美地恢復原始重疊及其所有半透明像素。請參閱使用兩個背景移除背景。如果您沒有兩個這樣的圖像,則無法完美地恢復圖像的半透明度,但是有一些技術可以完成合理但不完美的工作。如需詳細資訊,請參閱背景移除的其他章節。
適用於非特定背景的 GIF(或抖動透明度)
FUTURE: This will move into a more generalise (non-GIF specific), alpha dithering section.上述方法的最大問題是,它只有在您碰巧確切知道圖像將使用的背景顏色或背景圖案時才有效。如果您不知道,也並非毫無希望。如上所述,閾值不適用於具有很大透明區域的圖像,例如模糊陰影。但是另一種稱為抖動的技術可以,並且不需要知道它將在其上使用的背景。基本上,抖動會將透明度限制為開/關值,使用像素圖案在更大區域上產生半透明效果。換句話說,它偽造了半透明度。此方法在現在稱為「負鼠範例」中得到示例。不幸的是,這些範例實際上並沒有提供用於生成範例的命令。為了完整起見,我將嘗試在此處再次演示它們。「
-monochrome
」運算符會將圖像中的所有顏色轉換為純黑白「Floyd-Steinberg 誤差擴散抖動」。但是,由於它會將灰度圖像轉換為純黑白顏色,因此我們需要從圖像中提取 Alpha 色版遮罩,對其進行抖動,然後將其返回到圖像中。
|
![]() |
-channel
」設置僅限於 Alpha 色版(與「-monochrome
」不同)。
magick a.png -channel A -ordered-dither o2x2 a_ordered_2x2.gif magick a.png -channel A -ordered-dither o3x3 a_ordered_3x3.gif magick a.png -channel A -ordered-dither o4x4 a_ordered_4x4.gif magick a.png -channel A -ordered-dither checks a_halftone_2.gif magick a.png -channel A -ordered-dither h4x4a a_halftone_4.gif magick a.png -channel A -ordered-dither h6x6a a_halftone_6.gif magick a.png -channel A -ordered-dither h8x8a a_halftone_8.gif |
![[IM Output]](a_ordered_2x2.gif)
![[IM Output]](a_ordered_3x3.gif)
![[IM Output]](a_ordered_4x4.gif)
![[IM Output]](a_halftone_2.gif)
![[IM Output]](a_halftone_4.gif)
![[IM Output]](a_halftone_6.gif)
![[IM Output]](a_halftone_8.gif)
![[IM Output]](a_random_5x95.gif)
![[IM Output]](a_random_5x60.gif)
![[IM Output]](a_random_50x95.gif)
![[IM Output]](a_random_45x55.gif)
![[IM Output]](a_random_50x50.gif)
-ordered-dither
」會產生透明和不透明顏色的圖案來表示整體透明度。然而,這會產生非常明顯的規則圖案。但是,如果您使用與正常背景相似但較暗的陰影顏色,則可以使此圖案幾乎完全不可見。「checks
」圖案(第二行第一張圖像)特別令人感興趣,因為它是一個非常簡單的 3 級圖案,非常乾淨整潔。![]() ![]() |
IM v6.2.8-6 中使用「半色調」抖動圖案擴展了「-ordered-dither 」。然後在 IM v6.3.0 中使用命名的抖動圖案完全修改了該運算符(使用「-list threshold 」查看完整列表)。您甚至可以生成自己的抖動圖案來生成其他特殊效果。有關更多詳細資訊,請參閱有序抖動範例和有序抖動升級說明。在此次重新開發之前,參數只能包含幾何字串「 2x2 」、「3x3 」和「4x4 」(仍然可以使用)。但是,其他任何東西都被視為「-random-threshold 」參數,通常會導致災難性的結果。在非常舊版本的 IM 上使用此選項時需要小心。 |
-random-threshold
」會產生高度可變的隨機抖動,每次執行的結果都不相同。然而,這種抖動演算法的純隨機性往往會產生像素的「團塊」,而不是「Floyd-Steinberg」的「-monochrome
」運算子所產生的更平滑、演算法放置的抖動。「-random-threshold
」的最大優點是它提供的限制控制。透過設定非常嚴格的參數(例如「50x50%」),您可以將「-random-threshold
」變成一個簡單的「-threshold
」運算子。透過稍微放寬限制,您可以隨機化閾值限制的邊緣(例如使用「45x55%」)。![]() ![]() |
「-random-threshold 」參數「PxQ 」,其中「P 」是最小閾值,「Q 」是最大閾值(需要「%」符號)。因此,「5x95%」表示低於「MaxRGB 」5% 的任何值都設定為 0,高於 95% 的任何值都設定為「MaxRGB 」,否則我們會在「MaxRGB」的 5% 到 95% 之間選擇一個隨機值,作為該像素使用的閾值。參數「5x95%」值可能是在大多數情況下使用的最佳值。 |
FUTURE: dither example with a dither color matching the light blue background of this web page.
非 ImageMagick 的 GIF 處理
giftrans | 列出 GIF 圖像的所有屬性和顏色表。它還可以設定特定的顏色索引作為透明顏色,而無需修改圖像顏色表的順序,或合併具有相同顏色的顏色索引(不建議這樣做)。我發現 IM 的「magick identify 」命令在列出圖像屬性方面做得更好,包括圖像動畫中使用的「馬賽克應用程式擴展」中的「循環重複限制」。另請參閱「gif2anim 」腳本(如下),該腳本之前使用此程式提取從提取的單個「幀」重新建立 GIF 所需的 GIF 圖像元數據。現在,它僅使用「magick identify 」來提取此元數據。 |
GIFsicle | 這是一個通用的圖像優化程式,其最初的目的是在 GIF 圖像的演算法仍受版權保護時重新添加壓縮。該程式還可以用於添加註釋、建立 GIF 動畫,以及以與 IM 的「-deconstruct 」運算子相同的方式優化此類動畫,但具有進一步的透明度優化,例如LZW 壓縮優化。 |
InterGIF | 一個類似於 GIFsicle 的程式,專為處理動畫 GIF 而設計。但是,它僅提供透明度壓縮優化。但是,其他功能可能也很有用。*請將您的意見寄給我。* |
gif2anim | 一個 Shell 腳本,它接收一個 GIF 動畫文件,並提取所有單個幀圖像,以及一個包含從提取的幀圖像重建動畫所需的所有 IM「magick 」設定的「.anim 」文件。 |
anim2gif | 上述腳本的反向操作,它接收一個包含所有 IM "magick " 設定的 ".anim " 檔案,並重建一個 GIF 動畫圖像。這個腳本對於研究、編輯、調整和合併 GIF 動畫檔案非常有用。有關基本使用方法,請參閱動畫清單資訊。另請參閱附加動畫(時間同步)以獲取實際使用範例。 |
GIF 圖像偏移處理
雖然 GIF 格式會將帶有偏移量的圖像儲存為其圖像動畫處理的一部分,但它不會儲存負偏移量。任何嘗試將負偏移量儲存到 GIF 圖像的動作都會導致偏移量被重置為零。這在設計 GIF 圖像動畫時可能會很麻煩。如果 Internet Explorer 網頁瀏覽器收到一張 GIF 圖像,其「頁面偏移量」將圖像放置在「頁面畫布大小」之外,它將忽略頁面大小和偏移量,並像沒有偏移量一樣顯示它。另一方面,古老的 Mozilla 網頁瀏覽器只會顯示圖像畫布,並將偏移量應用於圖像。這可能會導致顯示一個沒有圖像數據的空白畫布,雖然這是正確的,但可能會出乎意料。如果圖像完全包含在該頁面畫布上,則兩者都將使用頁面畫布大小顯示圖像,並使用適當的頁面偏移量。相關 GIF 輸出格式
- GIF87:以較舊的 GIF 87a 格式輸出圖像。
- 如果「Mozilla」網頁瀏覽器看到這種舊格式,它將完全忽略圖像的頁面幾何形狀,並且不會使用更大的「頁面」框架,也不會對圖像使用圖像偏移量。IM 6.0.4 及更早版本通常會產生 GIF89a 格式。但是,如果圖像是 GIF 動畫,並且使用 +adjoin 分割成單獨的圖像,則 Im 會使用 GIF87a,導致在網頁瀏覽器中顯示時結果不一致。v6.0.4 之後的 IM 將始終產生 GIF 89a 圖像格式檔案,除非使用者明確要求使用舊的 "
GIF87:
" 輸出格式。
JPEG 圖像檔案格式
這種格式與上述的GIF 格式一樣普遍。但是,GIF 的設計著眼於小巧、簡單的「卡通式」圖像,而 JPEG 則適用於具有大量不同顏色和色調的大型真實圖像,例如照片。JPEG 檔案格式的一個關鍵特性是其壓縮功能,它可以在保持圖像被人眼可接受的同時減小圖像大小。這是一個非常複雜的過程,超出了本次討論的範圍。如需有關此過程及其影響的更多資訊,請參閱JPEG 壓縮簡介。以及 YouTube 影片JPEG DCT,離散餘弦變換(JPEG Pt2)- Computerphile中的一個很好的詳細解釋。遺憾的是,為了很好地壓縮圖像,演算法會故意「丟失」資訊。儲存的內容與記憶體中的圖像「不」相同;圖像中特定像素或區域的顏色通常與儲存的顏色「不」完全相同。這在圖像中物件邊緣附近尤其如此。所以,作為一個簡短的警告...
IM 是一個通用的光柵圖像處理器,用於修改圖像。
它不會進行無損 JPEG 修改。
如果您對無損處理感興趣,請參閱非 IM JPEG 處理。它不會進行無損 JPEG 修改。
如果 JPEG 影像經過變更,導致頂部或左側邊界的變更量不是 8 的倍數,則這種失真行為會變得更加明顯。發生這種情況時,JPEG 壓縮「區塊」或「單元」將完全不同,這可能會導致最終影像儲存大小大幅增加。也就是說,像是裁切、修剪、削邊、加框、擴展等操作(請參閱裁切和加框操作)可能會將影像資料偏移非 8 的倍數個像素。如需更多詳細資訊,請參閱 IM 論壇討論裁切影像導致檔案大小意外增加。
一般來說,JPEG 資料這種「失真」的特性並不明顯。但是,當您多次載入和儲存 JPEG 影像,或對顯示明顯顏色變化的圖表使用非常低的品質時,就會變得明顯。但是,只要您沒有重複載入或重複使用 JPEG 影像(從原始來源保留和套用操作),它仍然是一種良好的檔案格式,即使是它不擅長處理的影像類型也是如此。作為這種失真 JPEG 特性的範例,我在這裡產生一個由兩個漸層拼接在一起的簡單影像。雖然漸層提供了 JPEG 可以很好處理的平滑顏色變化,但兩個漸層之間的明顯顏色變化處理得並不好。
magick -size 5x10 gradient: gradient:blue-navy +append jpg_lossy.gif magick jpg_lossy.gif jpg_lossy.jpg |
![[IM Output]](jpg_lossy_mag.gif)

![[IM Output]](jpg_lossy_tn.gif)
magick jpg_lossy.gif -quality 100% jpg_lossy_100.jpg magick jpg_lossy.gif -quality 80% jpg_lossy_80.jpg magick jpg_lossy.gif -quality 50% jpg_lossy_50.jpg magick jpg_lossy.gif -quality 20% jpg_lossy_20.jpg magick jpg_lossy.gif -quality 5% jpg_lossy_5.jpg |
![[IM Output]](jpg_lossy_mag.gif)

![[IM Output]](jpg_lossy_100_tn.gif)
![[IM Output]](jpg_lossy_80_tn.gif)
![[IM Output]](jpg_lossy_50_tn.gif)
![[IM Output]](jpg_lossy_20_tn.gif)
![[IM Output]](jpg_lossy_5_tn.gif)
100%
」或最高品質儲存,仍然有一些輕微的顏色失真。它很難看到,但它確實存在。另一方面,對 JPEG 影像使用逐漸降低的「-quality
」設定會使這種顏色失真更大、更明顯。不僅如此,它還建立了一種邊緣「陰影」,產生從銳利邊緣散佈出來的顏色變化「波浪」。這種效應通常稱為振鈴效應。但是,使用壓縮的原因是產生的影像大小要小得多,至少在最初是這樣。以下是結果的檔案清單及其大小(以位元組為單位)。
請注意,在這種情況下,GIF 影像非常小,因為大「區塊」的顏色在 GIF 中壓縮得非常好。隨著 JPEG 品質降低,影像大小也會變小。當沒有設定 JPEG 品質(由使用者或來自來源影像格式檔案)時,預設品質設定約為 92%,這是非常高的品質。但是,使用低於「50%
」的品質設定時,影像大小在檔案大小節省方面不會變小太多,只會產生更加逐漸降低品質的影像。這是一個收益遞減的過程。總之...
JPEG 會損失資訊,在儲存時會降低影像品質。
在處理過程中對中間影像使用其他格式。
僅對最終影像使用 JPEG 格式,而不要用於進一步處理。
JPEG 也同樣不適合用於具有鮮明色彩變化的合成圖像,例如線條圖、圖表或卡通風格的圖標、文本和符號。這些顏色數量較少的圖像最好使用調色板圖像格式保存,例如 GIF 或 PNG8。一種新的 JPEG 圖像格式 Jpeg2000 正逐漸普及,它允許無損 JPEG 壓縮。但是,這需要同時安裝「JasPer」函式庫。要使用這種特殊格式,您還需要使用「在處理過程中對中間影像使用其他格式。
僅對最終影像使用 JPEG 格式,而不要用於進一步處理。
-compress jpeg2000
」選項或保存為 JP2 文件格式,以便 IM 調用正確的函式庫。JPEG 透明度 - 不支援
除了壓縮之外,JPEG 用戶面臨的另一個主要問題是
JPEG 不會保存透明度
因此,雖然您可以將圖像疊加到背景顏色或圖案上並保存為 JPEG,但您不能為 JPEG 圖像提供任意形狀的邊框或透明孔洞。由於 JPEG 的設計目的是保存真實世界的圖像,而不是圖像的一部分,因此在創建這種格式時,透明度並不是它所關注的問題。因此,設計者從未考慮在文件格式中包含 Alpha 通道或其他透明度信息。例如,讓我們以我們上面使用的具有透明度的 PNG 為例,並使用 magick 將其直接轉換為 JPEG。如您所見,所有透明部分都變成了黑色。但根據圖像來源(尤其是 GIF 圖像),透明區域也可能變成其他隨機或其他不適當的顏色。如果這可能成為一個問題,最好的辦法是在將圖像保存為 JPEG 圖像文件格式之前,讓 IM 移除 Alpha 透明度。JPEG 色彩失真(測試)
如上所述,JPEG 使用的壓縮算法是有損的。圖像將被修改以使其更好地壓縮,希望能夠減少文件空間。具體產生多少色彩失真取決於使用的品質設定。例如,讓我們看看 IM 內建的「netscape:
」圖像中有多少種顏色...
|
|
|
|
|
|
|
|
|
|
|
|
讀取 JPEG 控制選項
- -define jpeg:size={width}x{height}
- 此設定是一個提示,告訴 JPEG 影像函式庫只讀取輸入 (JPEG) 影像檔中足以建立至少具有給定大小(寬度 × 高度)或更大影像的部分。如果輸入影像很大,這可以大幅減少 IM 讀取影像所需的記憶體量,因為 IM 將會處理較小的影像。反過來,這可以顯著提高完整操作的速度。請記住,這只是一個關於所需影像大小的提示,您不能保證獲得這個大小,只能得到接近但大於該大小的影像。通常您會得到介於此大小和兩倍大小之間的影像,同時保留影像的縱橫比。通常在使用大小提示讀取 JPEG 影像後,會立即將影像調整為其最終的「精確」大小。通常也會使用「
-thumbnail
」來去除任何影像設定檔。例如...
magick -define jpeg:size=64x64 jpeg_large.jpg jpeg_size_hint.jpg magick -define jpeg:size=128x128 jpeg_large.jpg \ -thumbnail 64x64 jpeg_thumbnail.jpg請注意,此修飾詞會導致 JPEG 函式庫跳過整個像素列和行的讀取。因此,它會產生類似於採樣調整大小運算子的效果,包括其強烈的鋸齒偽影。因此,建議您至少指定最終「調整大小」影像的兩倍,以避免此問題,如上例所示。
在 IM v6.5.6-0 之前,這個編碼器設定是從「 -size
」設定中提取的。當使用者使用「-size
」進行影像建立,但 JPEG 讀取產生意外結果時,就會發生問題。因此,已將其更改為特殊的編碼器設定。
在舊版本上,您可能需要在讀取 JPEG 影像之前使用「+size
」重置「-size
」設定,否則 IM 可能無法完整讀取 JPEG 影像。
請注意,縮圖調整大小運算子也會針對極大規模的調整大小操作使用相同的採樣技術,以便在使用正常的調整大小操作之前快速減小影像的大小,但大小為最終影像大小的 5 倍,而不是兩倍。大小差異與最終影像品質有關。 - +profile '*'
- -strip
- 數位相機、掃描軟體和其他影像處理軟體(如「photoshop」)儲存的 JPEG 影像通常會在 JPEG 影像中添加大量的「程式註解」設定檔。這些選項中的任何一個都會在讀取影像後從影像中移除這些設定檔。「
+profile
」運算子會移除影像中的所有色彩設定檔,而「-strip
」會移除影像可能擁有的所有設定檔和中繼資料。另請注意,「-thumbnail
」是一個「-resize
」選項,它也會同時執行「-strip
」。另請參閱建立縮圖。- -type TrueColorMatte
- 由於 JPEG 不會儲存任何形式的透明度,因此在讀取時,它始終是不透明的,並且在記憶體中沒有「alpha」通道。此設定會強制在選項之後讀取的任何 JPEG 影像在記憶體中的影像中添加完全不透明的「alpha」通道。然而,更好的方法是在讀取影像後使用「
-alpha set
」或「-alpha set
」,因為它對讀取和寫入其他影像格式的影響較小。如需更多資訊,請參閱讀取和寫入時的影像類型和Alpha 集。
JPEG 控制選項寫入
根據預設,在寫回 JPEG 影像時,會使用讀取 JPEG 影像時找到的「-quality
」和「-sampling-factor
」。 然而,這可能無法在磁碟上產生相同的檔案大小,而且由於讀取和重新儲存 JPEG 影像,您仍然會損失影像品質。 然而,JPEG 量化表不會被保留。
- -quality {百分比}
- 這可能是儲存 JPEG 影像時更重要的選項,因為它控制著影像儲存到磁碟時被壓縮的程度。 該值不是大小百分比,而是一個品質值。 值越低,影像越小,丟失的影像資訊越多,產生的雜訊越多,影像品質越差。
FUTURE: VERY low quality example of a photo注意:品質設定為「100%
」並不能保證儲存影像時不會損失品質,而只是損失最少。 (請參閱下一個選項) 注意:除了透過反覆試驗之外,您無法確定獲得特定檔案大小的品質。 從「-quality
」75% 開始,並檢查產生的檔案大小。 如果太大,則將品質降低 10%;如果太小,則增加。 在您獲得品質的上下限後,進行二元搜尋以找到最符合您所需檔案大小的品質。 總共五到六次試驗就足夠了。- -define jpeg:extent={大小}
- 從 IM v6.5.8-2 開始,您可以為 JPEG 影像指定最大輸出檔案大小。 大小使用後綴指定。 例如「
400kb
」。 它的工作原理是生成 JPEG 影像的許多版本,對輸出品質「-quality
」設定進行二元搜尋,直到它盡可能接近給定的檔案大小而不超過它。 它透過將影像重複寫入臨時檔案來做到這一點,一旦它具有合適的品質大小,它就會將最終影像輸出到給定的輸出檔名,一次。 因此,當將最終影像輸出到管道或直接輸出到網路,而不僅僅是輸出到真實檔案時,輸出仍然可以正常工作。 但是,由於 I/O 需求,不要期望此過程非常快。 也許慢 4 到 8 倍。 如果您真的進行了時間比較,請將您的結果發送給我。- -compress LossLess
- 雖然「
-quality
」設定為「100%
」仍然會產生略微不同的顏色(它仍然是「有損」的),但「-compress LossLess
」選項會要求 JPEG 庫在不損失任何資料的情況下儲存影像。 因此,重新讀取影像應該與儲存時完全一樣。 警告:這僅在您的 JPEG 庫已針對「LossLess JPEG」編碼進行修補時才有效,但 JP2 檔案格式的使用已取代了這一點,因此此選項現在很少產生任何實際效果。 此外,您還*必須*設定「-quality 100%
」才能使其正常工作。 雖然直覺上您會認為使用「LossLess
」儲存會自動意味著使用 100% 的品質,但事實並非如此。 這是為 JPEG 影像寫入(根據定義,這是一種有損格式)添加不尋常的修補程式的結果。 當然,生成的檔案可能會比普通的 JPEG 影像大得多。 此外,您最終會得到一個無損壓縮的 JPEG,除了使用類似「修補」的 JPEG 庫之外,您將無法在任何地方讀取它。 因此,*不建議*使用「無損 JPEG」,而應使用其他格式(如 PNG 或 JP2)。- -interlace Line
- 使用「漸進式 JPEG」格式,以便在載入大型 JPEG 圖像時,可以先看到部分內容。另請參閱下方針對現有 JPEG 重新編碼而不造成進一步損失的非 IM 解決方案。
- -sampling-factor {水平}x{垂直}
- 調整 JPEG 函式庫用於色度二次取樣的取樣係數。這可以設定為「
2x1
」來建立 MPEG-2 動畫檔案。「2x2, 1x1, 1x1」是 IM 的標準二次取樣方法,對應於 4:2:0,請參閱維基百科,色度二次取樣。但是,當「品質」為 90 或更高時,則不會對通道進行二次取樣。基本上,它將定義處理「區塊」或「單元」的大小是 8 個像素還是 16 個像素。- -density {Xdpi}x{Ydpi}
- 雖然密度對結果圖像的輸出像素大小沒有影響。但是上述設定會儲存在 JPEG 圖像檔案格式的 JFIF 標頭中。遺憾的是,如果在儲存於圖像中的特殊 Photoshop 特定設定檔(「
8BIM
」)中也存在密度,則某些程式(例如 Photoshop)會忽略此設定。只有在使用輸出裝置(例如印表機或螢幕)時,密度才真正重要,因為這些裝置可以顯示縮放到真實世界大小的圖像。例如,確保掃描的照片或頁面以正確的大小列印。如需有關密度的詳細資訊,請參閱圖像密度中繼資料和重新取樣調整大小。- -type TrueColor
- 對於僅包含灰階值的圖像,IM 會自動使用灰階內部格式。此設定將覆寫此行為,並強制 IM 一律產生彩色 JPEG 圖像,而不是灰階圖像。如需詳細資訊,請參閱讀取和寫入時的圖像類型。
- -define jpeg:optimize-coding=false
- 關閉此圖像的最佳霍夫曼編碼表計算。預設情況下為開啟。它確實需要額外遍歷圖像以進行必要的計算,但這是最少的。
- -define jpeg:q-table={path}
- 定義一個包含自訂 JPEG 量化表的檔案,格式為 XML。範例表通常安裝在「
/etc/ImageMagick/quantization-table.xml
」中,但已內建於 ImageMagick 中,因此通常不會使用。在數位圖像處理論壇中可以找到許多關於產生表格的討論,在撰寫本文時,具體的討論主題包括JPEG 量化表、更好的 JPEG 量化表?、愚蠢的 PET 技巧:單一 qtable、JPEG 亮度量化表。此選項已新增至 IM v6.5.7-8。
JPEG 品質與檔案大小
針對特定品質設定而言,JPEG 檔案的最終檔案大小是無法確定的。整個壓縮過程非常複雜,微小的變化會對壓縮結果造成巨大的差異,如同「蝴蝶效應」一般。即使是使用相同來源圖片和相同品質設定,但使用不同版本的 IM、JPEG 函式庫或其他影像處理程式,您也會在檔案大小和觀察到的品質方面看到很大的差異。您不妨將品質設定視為對特定影像應套用多少壓縮或視覺品質的簡單「猜測」。基本上,除了實際執行之外,要預先確定給定影像和品質設定的最終檔案大小是不可能的...。不過,IM 可以透過使用特殊的「jpeg:extent
」定義來進行「測試」,以找出適合特定檔案大小的最佳品質。請參閱上方「JPEG 寫入控制」。這非常慢,但比類似的 DIY 解決方案快。不建議這樣做,不僅僅是因為它很慢。透過您固定的檔案大小方法,簡單的影像可能會以 90% 的品質輸出,但包含 50k 的不必要資料,而複雜的影像則必須降至 30% 的品質,並會由於缺乏細節資料而出現 JPEG 失真(或者簡單來說,看起來很糟糕)。更好的方法是找到一個單一的品質設定,為您選擇的合理影像產生平均 100KB 的檔案大小。即使如此,細節不多的影像可能只會輸出 50k,而具有大量複雜細節的影像可能會輸出 150k,但兩者看起來都可以接受。有關 JPEG 壓縮和品質的實用指南,請參閱「JPEG 壓縮設定的最佳化」。另請參閱「JPEG 壓縮、品質和檔案大小」,以了解 JPEG 內部細節。Photoshop 提示:Photoshop 會在 JPEG 影像中加入約 4 KB 的額外資訊,以儲存預覽和色彩管理資訊(配置文件「8BIM
」)。如果您不需要這些資訊,請使用「儲存為網頁用」功能。這個提示是在 Gernot Hoffmann 的一篇關於 JPEG 壓縮的論文中找到的。相關的 JPEG 輸出格式
- PJEG:寫入漸進式載入的 JPEG 影像。
- 在網路下載速度很快的今天,這已經不常使用了,但在撥接數據機盛行的時代,這非常普遍。基本上,首先寫入每隔 N 行,然後寫入它們之間的一行,依此類推,這樣即使只下載了完整影像的一小部分,您也能看到影像。
- JPEG2000:最新的 JPEG 格式,具備新的功能。
- 此格式需要安裝「JasPer jp2」函式庫,否則會出現錯誤訊息..「此格式使用小波壓縮來壓縮影像,而不是標準的 JPEG DCT 方法。這讓您在相同的影像品質下,獲得更好的壓縮率,進一步減少磁碟空間的使用。不幸的是,它還沒有被廣泛採用,所以您不能將其用於外部用途,至少在網路瀏覽器和其他影像瀏覽器和編輯器也開始使用這種格式之前是如此。任何以這種格式儲存的影像只能由擁有此函式庫的使用者讀取,而且可能需要很長時間,相當比例的使用者才會使用此函式庫,特別是 Windows 使用者,因為除非有足夠多的人要求,否則微軟可能不會將其包含在內。Quicktime 提示:Quicktime 使用 jp2 格式,但必須以「
no encode delegate for this image format
」-depth 8
」輸出。
非 ImageMagick 的 JPEG 處理(快速摘要)
jpegtran | 隨 JPEG 函式庫安裝的標準工具。這讓您可以在不需解碼和重新編碼影像資料的情況下,對 JPEG 格式的影像套用各種轉換,從而避免 JPEG 資料品質下降。(見下文) |
jpegtrans | 這是先前 "jpegtran " 程式的新版本,不過許多新增的功能(例如無失真裁切)現在都已內建於發行的函式庫版本(如上)。 |
jhead | 一個更易於使用的無失真 JPEG 處理程式,特別是在處理 EXIF 數位相機設定檔方面。它可以處理註解、日期調整、縮圖擷取、刪除或替換、設定檔剝離等。它還會嘗試確保其他設定檔不會被破壞,而這是 "jpegtran " 容易造成的問題。還有其他類似的程式,例如 "ExifTool " 和 "Exifer "。許多 JPEG 轉網頁相簿程式也會這樣做。 |
![]() ![]() |
JPEG 無失真旋轉(以上所有程式都提供)僅適用於大小可被 8 或 16 整除的影像。大多數(但並非所有)數位相機照片都符合這個條件。如果您嘗試對尺寸為奇數的影像執行此操作,則右側或底部區塊(包含部分尺寸)將無法在最終影像中正確定位,因為這些區塊只能存在於右側或底部邊緣。 有關此範例,請參閱此 特定討論 |
無失真 JPEG 處理
由於解碼和重新編碼 JPEG 影像會導致影像品質下降(除非使用無失真壓縮),因此 JPEG 影像函式庫提供了一些特殊程式,可以在不損失品質的情況下操作影像。這些命令通常也比 IM 等效命令快得多,因為它們不需要對影像進行太多處理。修改 JPEG 影像中的註解時,您可以使用較低階的 JPEG 函式庫程式 "rdjpgcom
"、"wrjpgcom
" 和 "jpegtran
"。不過,我建議您使用 "jhead
" 程式,因為它會保留影像中存在的任何設定檔或其他資訊。"jpegtran
" 可讓您進一步操作,實際上可以無失真地操作影像資料,包括 90 度旋轉、裁切和插入。它甚至允許建立混合品質的 JPEG 影像。如需相關示範,請參閱 Nemo Thorx 的 JPEGhack 頁面。(請參閱以下說明)不過,不建議將這些命令用於一般用途,因為它們受限於 JPEG 影像的區塊邊界(8 或 16 位元)。也就是說,您只能在 JPEG 壓縮細胞層級進行裁切、旋轉或插入,而不能在實際的像素層級進行。註解... 如果您要建立 JPEG 照片的 Montage 縮圖網頁索引頁面,並且想使用您透過上述程式新增至 JPEG 檔案的註解,請使用 "-label '%c'
" 告訴 montage 在 "magick montage
" 命令列上讀取檔名前使用「註解」欄位。您也可以在 複雜的 Polaroid 轉換、Polaroid Montage 或某種類型的影像 註解 中使用該註解。"jhead
" 程式可用於新增或修改 JPEG 影像檔案中的註解。不過,我發現使用「編輯註解」("-ce
")選項並不是一個好方法,因為它會在註解的結尾新增一個額外的換行符號。這個額外的換行符號會導致 IM 中的命令('%c
' 標籤格式化跳脫字元)無法正常運作。更好的方法是使用「註解輸入」("-ci
")輸入註解(結尾沒有換行符號),或者使用「註解字面值」("-cl
")選項會是更好的方法...
|
|
jhead
」也可以提取這些縮圖...
mkdir thumbs jhead -st "thumbs/&i" *jpg |
jhead
」提供的更詳細的編輯,請查看更多基於 Perl 的「ExifTool
」的 EXIF 中心應用程式,一個替代的編譯版本「ExifTool
」,以及一個 Windows GUI「Exifer
」,僅舉幾例。安裝 Image::ExifTool Perl 模組後,這將無損地去除所有 JPEG 中繼資料。我發現以下內容等同於用於去除 EXIF 資料的命令列方法。如果將來有人感興趣
use Image::ExifTool; $exifTool = new Image::ExifTool; $exifTool->SetNewValue('*'); # delete all... $exifTool->WriteInfo('original_image.jpg','modified_image.jpg'); $errorMessage = $exifTool->GetValue('Error'); print $errorMessage; # (if has value an error occurred) |
jpegtran
」將低品質的 JPG 插入高品質的 JPEG 中...- 解決方案
- 使用 ImageMagick 製作同一個影像的兩個版本,一個是高品質的 100,另一個是低品質的 60(為了減小檔案大小)。
- 使用 jpegtran 裁剪 q60,每邊裁掉 8 個像素
- 使用 jpegtran 將 q60 合併到 q100 的頂部
- 使用 jpegtran 合併成條紋
PNG 影像檔案格式
這是最新、最現代的影像格式之一,支援包含 Alpha 透明通道的 32 位元色彩,但也可以最佳化為類似 GIF 的 8 位元索引色彩配置(256 色限制)。因此,它是影像處理的絕佳中間格式,不會損失影像資訊。PNG 壓縮
與 PNG 輸出一起使用時,品質被視為兩位小數。第一個數字(十位數)是 zlib 壓縮級別,1-9。但是,如果使用設定「0
」,您將獲得霍夫曼壓縮而不是「zlib」壓縮,這通常更好!奇怪但真實!第二個數字是 PNG 資料編碼過濾(在壓縮之前)類型:0 是無,1 是「子」,2 是「上」,3 是「平均」,4 是「Paeth」,5 是「自適應」。因此,對於具有連續色彩序列的影像,「無」過濾器(-quality 00
)通常更好。對於自然景觀的影像,「自適應」過濾(-quality 05
)通常更好。![]() ![]() |
PNG 編碼器一直在進行大量工作,控制精確編碼和壓縮設定的更好方法通常使用定義運算子來設定。 有關定義的更多詳細資訊,請參閱下面的寫入 PNG 影像控制,或查看 PNG 編碼器檔案「 coder/png.c 原始碼」中的註釋。 |
-type TruecolorMatte
」影像讀取設定來強制執行此行為,或者您可以使用「PNG32:
」格式檔案儲存影像。外部程式「pngcrush
」或更新的版本「OptiPNG
」會嘗試重新壓縮特定的 PNG 以獲得最佳壓縮效果,建議您在計劃放置在網站上的影像使用。另一個程式「pngnq
」會將其顏色量化為 256 色、8 位元的 PNG,但目前尚不清楚此格式是否支援半透明顏色。更好的 PNG 壓縮
關於 PNG 影像的一點是,PNG 影像會保留完全透明像素的顏色。也就是說,即使您看不到它,透明度也有顏色,而 PNG 會保留該數據。這表示在許多情況下,可以透過將「隱形顏色」替換為靜態純色,而不是先前影像處理後可能留下的雜色,來使 PNG 壓縮得更好。您可以使用兩種主要方法來做到這一點,使用 Alpha 背景運算子 來僅處理完全透明的像素,或使用 具有透明度的模糊係數 類型操作,將接近半透明的顏色也映射到完全透明的黑色。例如,在這裡我採用上面生成的模糊陰影「a.png
」影像,並替換所有在完全透明度 20% 以內的像素。如您所見,影像大小有了顯著的改進(約 50%)。但是影像的陰影會被銳利地切斷。另一種選擇是透過調整透明度通道的 色階 來縮小陰影效果。
magick a.png -channel A -level 20,100%,0.85 +channel \ -background black -alpha background a_compress2.png |
![]() |
![[IM Output]](a.png)
![[IM Output]](a_compress2.png)
magick image.jpg -thumbnail 200x90 -colors 256 \ -quality 90 -depth 8 thumbnail.png |
PNG、網頁瀏覽器與透明度
Microsoft Internet Explorer(IE 版本 6 及更早版本)在涉及任何透明度時無法正確顯示 PNG。雖然這是最廣為人知的不完全支援 PNG 的瀏覽器,但它並不是唯一一個。《PNG 透明度測試》和《另一個 PNG 測試》頁面可讓您測試您的瀏覽器。它們還列出了產生顯示結果的瀏覽器和版本。然而,由於 IE(至少在撰寫本文時)可能是最常用的瀏覽器,因此您可以在網頁中新增一些解決方法來解決此問題。有關這方面的資訊,請參閱我的 WWW 實驗室頁面《具有透明度的 PNG 與 IE》,我在其中測試並示範了我正在使用的「IE 中的 PNG」解決方案。其他解決方案是將 PNG 轉換為 JPEG(具有正確顏色的背景)或 GIF 格式。這些方法在《背景上的 GIF 影像》中有詳細討論。另一個解決方案是在將影像儲存為 PNG 之前,設定影像中所有完全透明顏色的顏色。PNG 將會儲存該完全透明的顏色,但請注意,幾乎任何其他 IM 操作都會將完全透明重置為完全透明的黑色(因為透明顏色不應該在影像數學運算中產生影響)。舉例來說,標準的 IM 範例測試圖片 會使用完全透明的黑色來表示任何完全透明的像素。我們可以透過關閉 Alpha 色板或將其儲存為 JPEG 來驗證這一點...
|
![]() |
現在讓我們將其儲存,以便將所有完全透明的顏色替換為完全透明的「silver 」顏色(請參閱 Alpha 背景 運算子)...
|
![]() |
但是,如果我們關閉 Alpha 色板(透過儲存為不允許 Alpha 的 JPEG),我們可以看到 PNG 圖片確實使用了「銀色」來表示完全透明的像素。
|
![]() |
PNG 與虛擬畫布
雖然 PNG 通常不會儲存虛擬畫布大小資訊,但它會儲存虛擬畫布偏移資訊,如果存在,IM 會嘗試產生適合該偏移和圖片大小的「畫布大小」。對於某些圖片運算子,例如「-crop
」、「-trim
」和「-flatten
」等,請務必記住這一點,因為這些運算子會將圖片畫布或頁面大小作為其操作或結果的一部分。當然,您可以使用「-page
」設定和「-repage
」運算子來設定或移除虛擬畫布大小和偏移。(請參閱 頁面圖片屬性)。例如,第二個 IM「magick
」會看到此 PNG 圖片中存在的偏移,並定義一個足夠大的畫布,以確保圖片在虛擬畫布邊界內可見(已新增至 IM v6.1.7)...
|
![]() |
magick
」命令確實看到了一些虛擬畫布大小資訊...
|
![]() |
![]() ![]() |
有些網頁瀏覽器在處理負偏移時表現不佳,會產生奇怪的結果(有一個版本的 Firefox 就有這個問題)。 最好在可能會被其他程式(例如網頁瀏覽器)使用的圖片中避免使用負偏移。 |
PNG 解析度、密度與單位
經過一些測試後,似乎 PNG 圖檔格式不支援將「-units
」設定為「PixelsPerInch
」,而只支援「undefined
」和「PixelsPerCentimeter
」。因此,IM 會將給定的密度/單位設定值轉換為適當的「PixelsPerCentimeter
」值。關於這個主題的更多資訊即將推出。 PNG 子格式
PNG | 預設值。使用經濟的格式儲存影像。 |
PNG8 | 相當於 GIF 的 PNG 格式,包含布林透明度和 256 色表格。 |
PNG24 | 沒有 Alpha 色版的 8 位元 RGB 色版。特殊情況下可以包含布林透明度(見下文) |
PNG32 | 強制使用具有完整半透明度的完整 RGBA 影像格式。 |
PNG48 | 沒有 Alpha 色版的 16 位元 RGB 色版 |
PNG64 | 16 位元 RGBA 影像(包含半透明度) |
PNG00 | 從輸入影像繼承 PNG 色彩和位元深度。 |
![]() ![]() |
PNG8 是由 PhotoShop 定義的,而非 PNG 工作小組。雖然它可以處理多種半透明色彩,以及完全透明的色彩,但 IM 假設它不能。這提供了一種強制影像正常運作的方法,並預設可由 Internet Explorer v6 讀取。「Photoshop CS 」程式可以讀取它。 |
![]() ![]() |
PNG48、PNG64 和 PNG00 類型是從 IM v6.8.2-0 開始新增的 |
PNG8:
」格式儲存該影像...
magick {input_image} -type Palette indexed.png |
magick {input_image} -type GrayScale -depth 8 gray.png |
magick {input_image} -type GrayscaleMatte gray_with_transparency.png |
magick {input_image} -type BiLevel bitmap.png |
|
![]() |
寫入 PNG 影像控制
為了更好地控制 PNG 影像的寫入,Glenn Randers-Pehrson 在 IM v6.5.2 中修改了一些編碼器「定義全域設定
」控制項。這些控制項包括...- -quality '{level}{filter}'
- 儲存 PNG 影像時的基本壓縮等級和濾鏡。
-
-define png:compression-strategy=zs
-define png:compression-level=zl
-define png:compression-filter=fm
- 完整定義用於寫入 PNG 影像的壓縮系統。-quality設定通常會設定zl和fm值,但不會設定zs設定。
- -depth {depth}
- 要產生的影像的一般深度,通常設定為 8 或 16 位元。
- -define png:bit-depth={depth}
- 精確指定產生的 PNG 圖像文件格式的深度。這將覆蓋正常的 IM "
-depth
" 控制,但僅適用於寫入 PNG 圖像,並且僅在可以在不損失的情況下進行更改時。對於顏色映射圖像,這是顏色映射索引的深度,而不是顏色样本的深度。 - -define png:color-type={type}
- 精確指定要寫入的 PNG 文件的類型。值可以是
' 0
'對於灰度,它允許 ' 位深度
' 為 2、3、4、8 或 16。' 2
'對於 RGB,它允許 ' 位深度
' 為 8 或 16。' 3
'對於索引,它允許 ' 位深度
' 為 1、2、4 或 8。' 4
'對於灰度蒙版 ' 6
'對於 RGB 蒙版 -define png:color-type='2'
" 特別適用於強制將圖像數據存儲為 RGB 值而不是 sRGB 值。但是,可以使用線性 RGB 圖像上的 "-set colorspace sRGB
" 來實現類似的效果。但是,不要期望程序在讀取時會遵守此線性色彩空間。這包括 ImageMagick。 - -profile PNG-chunk-{x}:{file}
- 從 {file} 在位置 {x} 添加原始 PNG 配置。 {file} 的前 4 個字節包含區塊名稱,後跟冒號 ':' 字符,然後是區塊數據。 {x} 可以是 'b' 表示將配置文件放在 PLTE 之前,'m' 表示放在 PLTE 和 IDAT 之間,或者 'e' 表示放在 IDAT 之後。如果您想寫入同一類型的多個區塊,請在 {x} 後面添加一個簡短的唯一字符串,以防止後續配置文件覆蓋前面的配置文件。舉例來說..
-profile PNG-chunk-b01:file01 -profile PNG-chunk-b02:file02
-
+set date:create
+set date:modify
- 這些是 ImageMagick 在讀取文件時創建的圖像“屬性”。它們包含(分別)圖像文件創建時間(實際上是權限/所有者/移動更改時間)和最後文件修改時間。不幸的是,PNG 圖像文件格式喜歡使用 PNG 圖像文件格式寫入此類圖像數據,如果此數據不同,則生成的文件也會不同,即使沒有其他任何更改。
magick logo: logo.jpg magick logo.jpg logo1.png sleep 2; touch logo.jpg # change the JPG file timestamp magick logo.jpg logo2.png diff -s logo1.png logo2.png magick compare -metric RMSE logo1.png logo2.png null:
diff
" 將返回消息"儘管 "二進製文件 logo1.png 和 logo2.png 不同
"magick compare
" 返回 "0 (0)
",表示圖像具有完全相同的圖像數據。請注意,由於 IM 使用它剛讀取的 PNG 文件的時間覆蓋了這些屬性,因此您無法使用 "magick identify
" 查看記錄在 PNG 中的這些屬性的實際值。解決方案是保存 PNG 圖像時不帶任何“時間戳”。magick logo: logo.jpg magick logo.jpg +set date:create +set date:modify logo1.png sleep 2; touch logo.jpg magick logo.jpg +set date:create +set date:modify logo2.png diff -s logo1.png logo2.png
diff
" 報告..."順便一提:您還可以 使用其他 UNIX 程序(例如“文件 logo1.png 和 logo2.png 相同
"cmp
”、“md5sum
”或“sha1sum
”)來比較二進制圖像文件。後兩個程序不能保證,但它們幾乎不可能被愚弄,並且在比較兩個以上的文件時速度更快(使用校驗和)感謝 GlennRP(PNG 開發者)的一些補充,您現在也可以使用“-define png:exclude-chunk=date
”告訴 PNG 編碼器不要寫入與日期相關的文本塊。
非 ImageMagick 的 PNG 處理
PNG 有很多輔助應用程序,它們可以作為生成最終 PNG 圖像文件的有用輔助工具。pngtrans | 與圖像一起存儲的 PNG 信息 |
pngcrush | 嘗試通過使用所有可用的邏輯 PNG 壓縮來壓縮圖像,然後為每個單獨的圖像做出最終選擇,從而嘗試找到 PNG 的最佳壓縮。當然,這在每張圖片上都需要一些時間。 |
OptiPNG | 一種更新的 PNG 壓縮優化器。 |
pngquant | 有損 PNG 優化器,通過抖動將 PNG 圖像縮減為 8 位調色板。它將構建具有在 tRNS 塊中傳達的 alpha 透明度的索引顏色 PNG。 |
pngnq | 一種更新的有損 PNG 量化器,用於生成 8 位元色表的 PNG 圖像。同時強制使用調色盤。 |
pngout | 一種 Windows 平台上的 PNG 優化器(可選圖形界面),它使用針對空間而非速度進行優化的 ZIP 壓縮器(也在上面鏈接的頁面上)。 |
圖像配置文件
處理照片品質圖像的配置文件非常重要,然而據我所知,這是一門非常神奇的藝術,而不是一件簡單的事情。並非所有格式都使用配置文件,但大多數現代格式都使用。這包括 JPEG、PNG、TIFF 和(從 IM v6.3.4-1 開始)GIF。事實上,問題因許多程序甚至不理解或查找圖像中的顏色配置文件而變得更加嚴重。Alan Gibson,又名 Snibgo,在他自己的 Snibgo,ImageMagick 配置文件 頁面上,總結了各種網絡瀏覽器如何處理各種顏色配置文件。這值得一看。要列出圖像中存在的配置文件,請使用...
magick identify -verbose image.tif | grep 'Profile-.*bytes' |
-
EXIF 數位相機元數據 ICC 圖像色彩空間配置文件 ICM Microsoft 色彩管理(類似於 ICC) IPTC 圖像和作者資訊 8BIM Photoshop 元數據配置文件。包括以下數據:剪貼路徑... 還有什麼? XMP Adobe 的可擴展元數據平台 (XMP)(請參閱 Adobe 頁面)
magick -define jpeg:size=64x64 image.jpg iptc:profile.iptc magick -define jpeg:size=64x64 image.jpg xmp:profile.xmp |
-define
”選項用作 JPEG 庫的“提示”,以減少其讀入內存的實際圖像數據量,從而節省大量您實際上不打算使用的數據處理。您還可以插入或重新插入任意配置文件作為“Blob”或包含您喜歡的任何資訊的二進制字符串。
-profile 'profile_name:data_file' |
data_file
”會“按原樣”添加到圖像中,作為配置文件 profile_name。IM 或任何其他應用程序將忽略此類配置文件,除非它明確知道它。顏色配置文件基礎
首先簡單說一句...
色彩管理是為膽小鬼準備的 -- 不要玩弄它們
亂搞配置文件通常會使事情變得更糟
所以,如果顏色看起來不錯... 就別去動它了。IM 論壇中的一位用戶 *fhoech*(他後來消失了)多次發布了以下關於使用顏色配置文件來改變圖像所使用的色彩空間的基本介紹... RGB、sRGB 和 CMYK 不是色彩空間,它們是色彩系統(IM 使用「亂搞配置文件通常會使事情變得更糟
-colorspace
」運算符來控制)。沒有一個單一的 RGB 或 CMYK 色彩空間,但在每個色彩系統中都有無限多種不同的色彩空間是可能的。你需要能夠準確描述圖像色彩的 ICC(或 ICM)配置文件。通常,描述圖像的 ICC 配置文件應該嵌入到圖像本身中,否則,你必須使用「最佳猜測」的方法,這只是一個變通辦法:在支持 ICC 的圖像編輯器中打開圖像,並指定不同的 ICC 配置文件(不要轉換!),直到你找到一個在你的圖像上看起來不錯的配置文件(你的顯示器必須經過校準,這樣你才能真正得到一個良好的色彩預覽)。然後,保存嵌入配置文件的圖像。至於為什麼你需要兩個配置文件:源配置文件描述了圖像中現在的顏色。目標配置文件描述了轉換後輸出圖像中的顏色。此外,在轉換到給定的目標配置文件時,你應該非常小心:例如,如果你使用了一個描述在非塗佈紙張上進行膠印的配置文件,但打算將這些圖像用於在塗佈紙張上進行印刷,那麼你當然不會得到任何好的結果。輸出配置文件需要準確地表示你預期的輸出條件。當在不使用正確配置文件(用於轉換的兩個步驟)的情況下,從減色色彩空間轉換到加色色彩空間(反之亦然)時,在大多數情況下,你不會得到「正確」的顏色或亮度,儘管你可能會很幸運地「意外」擊中目標。你可以從 國際色彩聯盟 下載顏色配置文件。透過配置文件更改色彩空間
雖然你可以像這樣直接簡單地使用 magick 色彩空間...
|
-profile
」運算符的顏色配置文件。*Raf Lenaerts* 指出了在 ImageMagick 中使用「-profile
」運算符的以下規則...總之...- 「
-profile
」必須放在輸入和輸出文件之間。
這實際上是標準的 IM 命令列處理實務。 - 使用帶有「
icm
」的「+profile
」來移除任何存在的 icc 配置文件。 - 然後給出的第一個「
-profile
」是輸入配置文件。 - 給出的第二個「
-profile
」是輸出配置文件。
-profile
」操作:移除、輸入和輸出配置文件選項。例如,如果輸入圖像已經有一個顏色配置文件,那麼只需要一個。
|
|
|
|
色彩描述檔修改
您想使用 magick 處理的影像都應該嵌入 ICC 描述檔。因此,若要使用相同的 CMYK ICC 描述檔來處理影像...
|
-black-point-compensation
」以及「-intent relative
」來獲得更接近預期的結果。
|
![]() ![]() |
「-black-point-compensation 」和「-intent 」設定都必須在「-profile 」操作之前指定,才能生效。 |
![]() ![]() |
「-black-point-compensation 」選項已添加到 IM v6.2.7-0 中。 |
EXIF InterColorProfile
除了上述色彩描述檔處理之外,許多數位相機還會將色彩描述檔資訊儲存在 EXIF 描述檔屬性「InterColorProfile
」中。根據「色彩管理和 Adobe PhotoShop 7」文件,此屬性應該「*在沒有嵌入色彩描述檔的情況下採用*」。IPTC 描述檔
IPTC 描述檔用於影像中,以儲存影像的識別屬性,例如標題、版權、作者、關鍵字等。如果要將 IPTC 描述檔添加到影像,您需要一個 -profile 參數
|
|
|
|
|
XMP 描述檔
從 TIF 影像中提取 XMP 描述檔...
|
關於向量影像格式的說明
世界上有不止一種影像儲存方式...點陣圖 | 使用彩色像素陣列儲存和處理的影像。點陣圖影像格式包括 GIF、PNG、JPEG、TIFF 等等。影像可以由代表不同顏色的多個陣列(通道)組成,並且可以在一個影像檔案格式檔案中包含多個影像、圖層或影格(取決於用途)。 |
向量圖 | 影像以線條、粗細、拼貼、漸層和更大的複合物件來定義。格式包括 SVG、Postscript、PDF、FIG、DXF、WMF,甚至 TTF 字型。它允許*在不損失品質的情況下*調整影像大小,甚至大幅放大。此外,在編輯此類格式時,您通常可以移動整個物件,而不會破壞底下的內容(物件分層)。 |
碎形圖 | 碎形圖是一種特殊的罕見情況,用於實現複雜影像(例如舊繪畫)的極端壓縮。然而,我所知的唯一用途是在非常昂貴的商業產品中。除此之外,它還用於複雜的數學物件,例如 Mandelbrot 和 Julia 集,以及在螢幕保護程式中產生隨機的色彩飛濺(IFS)。它非常少見。 |
避免使用 ImageMagick 進行「向量圖像」到「向量圖像」的轉換
例如:在以下格式之間轉換:PDF、PS、SVG
例如:在以下格式之間轉換:PDF、PS、SVG
換句話說,針對正確的工作使用正確的工具。 對於這種情況,ImageMagick 不是合適的工具。
也就是說,並不是說 IM 不能用於進行這種轉換。 畢竟,大多數打印機和顯示器實際上會自己對圖像進行點陣化,以便實際打印到紙張上。 不同之處在於,打印機知道它正在使用的硬件需要什麼分辨率。 ImageMagick 不知道。 有關將向量圖像轉換為點陣圖(以及改進此類轉換)的示例,請參閱示例Postscript/PDF 預格式化文本和圖形輸入,以及 SVG 和用戶生成的向量圖像,請參閱SVG 圖像處理。 您可能還會發現有關字體大小、分辨率和磅值的信息很有用,特別是關於「-density
」對繪製文本字體的影響。非 IM 替代方案
如果您確實需要在向量格式之間進行常規轉換,則程序UniConvertor,Sk1 項目(通常作為標準 Linux 軟件包提供)和VectorSection可用於在不實際點陣化圖像的情況下轉換向量到向量。 要將 Postscript 常規轉換為其他向量格式,請查看「pstoedit
」,它通常在您的系統額外軟件包存儲庫中可用。 另請查看「epstopdf
」,它是綜合 TeX 網絡 (CTAN)的一部分。 TeX 和 LaTeX 是 UNIX 文檔(書籍和科學文章)文本處理系統。 它有很多與 Postscript 和 PDF 格式相關的工具。 對於 SVG 到 PDF 的轉換,Wolfgang Hugemann <Auto@hugemann.de> 建議最簡單的向量到向量轉換是在瀏覽器(Firefox)中顯示 SVG 並使用 PDF 打印機驅動程序打印它。 雖然也可以使用「Uniconvertor」。其他圖像文件格式
當然,IM 可以使用和理解大量的其他圖像文件格式,但是使用許多這些不太「常見」的格式專門用於某些特定目的,並且通常需要一些調整或其他選項才能讓它們按照您想要的方式執行。 我不推薦這些文件格式,而且我個人通常也不使用它們。 但是,我確實嘗試記錄在 IM 郵件列表或IM 論壇上報告的各種註釋、技術和選項,以便其他人也可以使用收集到的信息。 許多註釋都是原始的、未經處理的形式,我願意接受進一步的貢獻,或者對以下註釋進行重寫。Postscript (PS, EPS) 和 Adobe PDF
有關基本處理,請參閱Postscript 文字處理,以及關於向量圖格式的警告。Postscript 及其相關格式(如 PDF)的主要問題是,它是一種複雜的頁面格式化語言。也就是說,該格式是一種程式,而不是真正的圖像格式!這表示 IM 被迫依賴另一個外部程式(或委託)來「運行」該程式並返回生成的圖像。封裝 Postscript (EPS)
封裝 Postscript 實際上與標準 Postscript(一種向量圖格式)完全相同,只不過它是一個單頁圖像,並且存在一個「邊界框」條目來定義圖像覆蓋的確切區域。該格式的設計目的是允許其他程式在將其定義的 Postscript 插入到其他 Postscript 文件中時移動和縮放圖像。IM 處理它的方式與 Postscript 基本相同。(見上文)。magick image.jpg -compress none eps2:image.eps使用「EPS2:」或「EPS3:」來創建 JPEG 壓縮的 EPS 文件:備註:將配置文件添加到 EPS 圖像的功能已列入「待辦事項」清單,但目前尚不支持。
Postscript/PDF 輸入
由於此格式是一種向量圖格式,因此它會受到「-page
」和「-density
」等設置的影響。有關讀取 Postscript(與 EPS 和 PDF 格式相同)的範例,請參見Postscript 格式化文字,您應該先閱讀此內容。但是,這些格式的讀取非常複雜,因為它們是專為在高品質雷射印表機上生成列印頁面而設計的完整電腦語言。這遠遠超出了 ImageMagick 的範圍,因此它依賴於一個稱為「ghostscript」的專用委託程式來讀取 Postscript 和 PDF 頁面並將其轉換為點陣圖。**一點:**由於 IM 使用 Ghostscript 以特定解析度將 Postscript 文件光柵化,因此除非知道該點陣圖的確切密度,否則 Postscript 文件中的任何點陣圖通常都會變得模糊或失真。這還假設 Postscript 程式本身不會旋轉或以其他方式處理點陣圖。實際上,存在多個委託,IM 會根據情況選擇使用哪個委託。例如,「ps:color
」(使用「bmpsep8
」ghostscript 設備)和「ps:alpha
」(使用「pngalpha
」)的選擇取決於是否設置了「-channel RGBA
」。默認情況下使用「ps:color
」委託而不是「ps:alpha
」,因為「pngalpha
」ghostscript 設備僅支持一頁/一個圖像,而 PDF 通常是多頁的。在讀取圖像之前使用「-channel RGBA
」來選擇「pngalpha
」委託方法。如果您只想獲取頁數,則使用 ghostscript 會快得多。
gs -q -sPDFname=document.pdf pdfpagecount.ps %%Pages: 96 |
特殊的 ImageMagick PDF 讀取選項
用於處理 PDF 的特殊選項...-units PixelsPerInch
- 在處理 PDF 文件(讀取或創建)時應設置此選項。我不確定它的作用,但報告指出應設置此選項才能正常工作。
-define pdf:use-cropbox=true
- 根據 Adobe 生成的 PDF 文件,使用「裁剪框」而不是默認的「媒體框」。(基本上是在從 PDF 圖像轉換為 ghostscript 時添加「
-dUseCropBox
」。備註:如果您的 PDF 只有一頁,則此方法有效,但如果它是多頁 PDF,則不會正確裁剪。 -define pdf:use-trimbox=true
- 根據 Adobe 生成的 PDF 文件,使用「修剪框」而不是默認的「媒體框」。
修改輸入委託
修改系統委派很危險,一個錯誤可能會讓 IM 無法讀取 PostScript/PDF 檔案。您可能也需要管理員權限,因為基於安全(「駭客」)措施,您無法使用個人委派來取代系統定義的委派。如需委派 XML 語法和含義,以及建立個人輸入/輸出委派的更多資訊,請參閱影像格式的委派和編碼器。在論壇主題將 EPS 轉換為 JPG 不穩定中,建議您編輯系統的「delegates.xml
」,並將「-sDEVICE=bmpsep8
」替換為「-sDEVICE=bmp16
」。其他使用者發現將其更改為「-sDEVICE=pnmraw
」也能獲得更好的效果。我沒有親自嘗試過,因此無法保證這一點,也無法保證這適用於哪些版本的 Ghostscript。如果您有任何進一步的資訊,請告訴我。如果您有一個 CMYK 的 PostScript 或 PDF 檔案,那麼John 的部落格頁面詳細說明了如何修改委派項目(新增「-dUseCIEColor
」Ghostscript 選項),以便 Ghostscript 轉換處理這種類型的 PostScript。另一種可能性是建立一個個人「委派」,它會呼叫 pdftoppm。假設標籤稱為「pdfalt
」,它會呼叫「pdftoppm
」程式,甚至是「xpdf
」套件中的「pdfimage
」。那麼您的串流看起來會像這樣
|
pstoedit
」,它可以將 PostScript 檔案轉換為其他向量格式,或者將 PostScript 傳遞到 ImageMagick API,以便將其轉換為點陣圖。我沒有嘗試或測試過,希望得到一些回饋。PDF 點陣圖提取
將任何 PDF 頁面渲染為特定大小或「密度」是 PDF 使用向量圖形的核心。它適用於文字或線條圖。但這也意味著 PDF 中的任何點陣圖(像素陣列)都必須調整大小。但調整大小是一個「有損」的操作,會導致一些影像品質下降,除非您使用該點陣圖的原始密度,而該密度在 PDF 中的影像之間可能有所不同!因此,能夠在沒有任何「密度」參考的情況下從 PDF 中提取點陣圖是有利的。您可以使用「pdfimages
」程式直接提取點陣圖,該程式是poppler-utils或「xpdf-utils」軟體套件的一部分。這些軟體套件還包含許多其他您可能會發現對 PDF 處理有用的工具。請參閱適用於 Windows 的 Poppler和Xpdf 閱讀器。您也可以查看負責 GhostScript 的同一個團隊所提供的「MuPDF」套件中的「mutool
」。一個用於提取文字和影像的線上工具是Sumnotes(商業用途,提供有限的免費試用)。在較低層級,Wolfgang Hugemann 表示您可以提取 PDF 中包含的任何影像(尤其是由掃描器產生的 PDF)。基本上是透過提取「stream」和「endstream」之間的任何位元組序列,並將其儲存為單獨的檔案。PDF 文字提取
您可以使用 Ghostscript 程式「ps2ascii
」或「pstotext
」。或者,作為文字和影像的替代方案,請查看「pdftohtml
」,它有一個 XML 輸出,Ross Presser 報告說「非常擅長重新組合段落。」。此外,「pdftk
」程式可以「解壓縮」PDF,以便直接編輯,並「修復」損壞的 PDF。PostScript/PDF 輸出選項
下列設定已知會影響 Postscript、Encapsulated Postscript 和 PDF 圖像格式的輸出:"-page
"、"-gravity
"、"-compress
"、"-density
"。預設情況下,PDF 圖像輸出不使用壓縮,因此 PDF 文件通常會比需要的更大。下表將 IM 壓縮模式與使用的結果 Postscript 壓縮模式等同。
PS/PDF 壓縮含義
建議的 PDF 壓縮方式是 Zip(Deflate 壓縮)或 Group4(傳真)壓縮。壓縮 | 圖像 '/Filter [ ... ] ' 設定 |
---|---|
"-compress none " |
'/ASCII85Decode ' |
"-compress zip " |
'/FlateDecode ' |
"-compress jpeg " |
'/DCTDecode ' |
"-compress lzw " |
'/LZWDecode ' |
"-alpha off -monochrome -compress fax " |
'/CCITTFaxDecode ' |
"+compress "" -compress rle "其他任何東西 |
'/RunLengthDecode ' |
|
Postscript/PDF 輸出替代方案
請記住,PDF 是一種向量圖像(文檔)格式,而 IM 是一種光柵圖像處理器。這意味著 IM 創建的任何 PDF 文檔基本上都包含每頁一個光柵圖像。PDF 文檔中輸出的圖像將固定在特定的分辨率(或像素密度),這可能會在以其他分辨率查看或打印時導致像素失真問題。此外,對於文本文檔,使用光柵圖像是浪費的,因為帶有字體和格式化元數據的純文本始終比文本的掃描光柵圖像小得多且渲染效果更好。因此,其他 PDF 創建程序可能更適合您的需求。這將使您可以將圖像保留為圖像,將文本保留為文本,從而以更好、更合乎邏輯的方式將文本和圖像放置在一起,以及以更合乎邏輯的方式插入文本並覆蓋箭頭或連接線。例如,我建議您查看 TeX 和 LaTeX 系統提供的支持程序。請參閱 綜合 TeX 網絡 (CTAN)。另一個工具集是 Multivalent 文檔工具。當然,此類程序難以自動化,但是我過去曾使用簡單的 FIG 向量圖形文件格式(請參閱 Xfig)以自動方式生成包含文本和圖形的 Postscript 和 PDF 文檔。 圖像到 PDF 轉換器... 工具 sam2p 專門用於將圖像轉換為 PDF 文件。因此,使用 ImageMagick 完成所有預處理,然後使用 "sam2p
" 進行最終對話。它甚至帶有一個小腳本來將結果調整為 A4 紙。來自 sam2p README問題 58) | sam2p 可以生成按比例縮放到指定頁面大小(即保持縱橫比)並在頁面上居中的 PDF 嗎? |
答案 58) | 不能,但 sam2p 附帶的 Perl 腳本 sam2p_pdf_scale.pl 可以對 sam2p 創建的文件進行後處理。例如,要縮放 PDF 並將其居中在 A4 紙上,請執行
|
您也可以使用 JAVA 工具包將 IM 生成的圖像合併成 PDF,這樣生成的 PDF 比 IM 生成的簡單 PDF 更好...#!/usr/bin/perl # Script pdf-combiner.pl use strict; use warnings; use PDF::Reuse; prFile('combo.pdf'); # Output. for (qw/a b c d/) # Inputs. { prImage("result_$_.pdf"); prPage(); } prEnd();
在 IM 討論區 上的另一位用戶也建議使用 PDFjam 來合併多個 PDF 頁面。#!/bin/bash for x in ./*.jpeg do echo $x to ${x}.pdf magick $x -quality 75 ${x}.pdf done echo Merging... java tool.pdf.Merge *.pdf
PbmPlus / NetPBM 影像檔案格式PBM PGM PPM PNM PAM
PbmPlus 或 "NetPBM" 影像處理濾鏡(Unix 命令列)。這些影像格式有各種樣式:"PBM
"(點陣圖)、"PGM
"(灰階)、"PPM
"(彩色)、"PFM
"(浮點數,用於 HDRI)、"PAM
"(任意格式)和 "PNM
"(任何 NetPBM 格式)。除了 "PAM
" 和 "PFM
" 之外,其他格式都可以是「原始」二進制格式(IM 或 NetPBM 寫入時的預設格式),也可以是純 ASCII 文字格式(使用 "-compress None
" 設定)。當然,IM 可以讀取所有這些格式。該格式應被視為僅使用「線性 RGB」色彩空間,而不使用大多數其他影像檔案格式使用的「sRGB」。但是,在使用「線性 RGB」時,應使用 16 位的深度,因此建議謹慎操作,以避免 8 位深度影像出現嚴重的捨入誤差。NetPBM 格式通常將每個影像儲存為一個檔案。但是,IM 和許多其他 NetPBM 工具程式會讀取和寫入多個影像,這些影像只是簡單地串聯在一起。因此,在寫入影像時,最好在寫入檔案時設定適當的 "-/+adjoin
" 設定。(詳情請參閱 寫入多個影像序列)。PPM 檔案格式對 ImageMagick 來說尤其重要,因為它是透過 "ghostscript" 代理程式轉換 Postscript 和 PDF 影像時使用的通訊格式。它也是視訊影像處理的主要格式,例如來自 "ffmpeg" 命令。輸入可以使用任何「品質」或值範圍(最高 16 位或 65535「深度」)。例如,以下是一個非常不尋常的值範圍 5,用於產生「階梯漸變」。我不知道還有哪種影像格式允許您使用這種奇怪的品質範圍。
|
![]() |
PbmPlus/NetPBM 與 ASCII 資料格式
它的 ASCII 輸出可能是從特定影像中提取顏色值的最乾淨方法,這再次使其非常適合腳本和簡單的影像處理。
|
![]() |
tr
" 文字工具程式將多個逗號和空格替換並壓縮為單個換行符,將所有值放置在一行中,以便腳本更容易處理。此外,使用 IM,您只能為 PGM 和 PPM 的輸出品質指定 8 位或 16 位的「深度」。雖然 PbmPlus 格式允許對其值使用任何「最大值」,即使不是 2 的冪!它的深度確實有 16 位的硬性限制(最大值為 65535)。目前無法對 NetPBM 影像的實際「最大值」進行更精細的控制,不過將來可以透過特殊的編碼器設定來添加。(如果需要)。以下另一個範例,從內建的玫瑰影像中提取一個 9x9 的灰階值陣列,範圍從 0 到 255。我使用了 "pnmtopnm -plain
",因此在每個像素行的末尾都有一個換行符。此 NetPBM 命令的舊版本包含「pnmnoraw
」和「pnmtoplainpnm
」,它們的功能與「pnmtopnm -plain
」相同。請查看您的 NetPBM 套件手冊頁面,因為開發人員似乎無法決定如何實現。這些 PbmPlus 程式都會在「影像列」的末尾輸出一個換行符號,而 ImageMagick 編碼器則不會。這可以讓腳本中的影像處理變得容易許多。以下是一個輸出非常小的 ASCII PBM 點陣圖的範例。請注意,PBM 點陣圖甚至不需要在值之間輸出空格,儘管允許這樣做(IM 輸出空格,PbmPlus 工具程式則不會)。另請注意,對於點陣圖,白色 =「0
」(背景),黑色 =「1
」(前景)。這是 XBM 和 PBM 等點陣圖格式的標準,ImageMagick 理解此慣例。如果不需要這樣做,請反轉影像,或使用依顏色調整影像層級來設定點陣圖影像的所需顏色。PbmPlus/NetPBM 深度控制
有時您需要更多地控制 PGM 和 PPM 影像的深度,例如使用從 0 到 99 的百分位數範圍。一種方法是使用 NetPBM 程式「pamdepth
」,它可以將影像的魔法值設定為任何範圍(最高可達內部限制 65335)。例如,以下是一個值陣列的影像,但使用 0 到 99 的輸出值範圍。以下是另一個範例,但這次使用反向層級運算子來設定輸出值範圍。這讓您可以更好地控制值的轉換,但 PGM 影像中的「最大值」與影像的最大值不符。上述命令中的「+depth
」對於將影像檔案深度設定為與 IM 品質層級相同至關重要。您只需要將第三行重設(或忽略)為值「99
」,並選擇性地將影像壓縮回「原始」二進制 NetPBM 影像格式即可。但是,由於 PbmPlus/NetPBM 的最大深度為 65535(16 位元),因此這僅適用於 IM Q8 或 Q16 版本。PbmPlus/NetPBM 註解
IM 會讀取、寫入和保留 PbmPlus/NetPBM 檔案格式標題中的「註解」行。例如...但是,大多數應用程式(包括 PbmPlus 本身)都會忽略此類註解,甚至在處理檔案時將其遺失。PbmPlus/NetPBM 與 ImageMagick 的比較
PbmPlus/NetPBM 影像處理套件曾經是 ImageMagick 在命令列影像處理方面的競爭對手,但它使用了一種完全不同(更低階)的管道過濾理念來處理和處理影像。這使得它易於在 shell 腳本中使用,但更難以用於一般或非常複雜的影像處理。這也意味著影像會更頻繁地在影像檔案格式之間轉換,並且通常需要使用許多臨時檔案。PbmPlus/NetPBM 影像通常不處理透明度(儘管較新的 PAM 格式可以),並且不提供將影像中繼資料與影像資料一起傳遞的通用方法。所有 PbmPlus/NetPBM 格式(如 ImageMagick 內部格式,請參閱 MIFF 影像串流)都可以處理多個影像的串流,只需將影像一個接一個地連接或附加在一起即可。這使得它非常適合基於管道的多影像串流影像處理方法,例如影片處理。但請注意,某些 PbmPlus/NetPBM 程式只處理單個影像,而不會處理多個影像的串流。然而,由於它更底層,並且早於 ImageMagick,因此它經常被選擇用於原始影像輸出,例如影片影像輸出和處理。PbmPlus 影像也更常被用於科學數據,因此這些影像通常存儲為「線性 RGB」色彩空間,而不是更常見的非線性「sRGB」色彩空間。請謹慎使用。這兩個套件可以共存,而且我曾經使用 PbmPlus/NetPBM 實現來代替 ImageMagick 來完成一些任務。通常是在使用特定的低階影像處理或使用存儲在影像形式中的值數組進行腳本編寫時。這兩個套件可以很好地協同工作,建議同時安裝並使用它們來進行嚴肅的影像工作。![]() ![]() |
實際上,在 1995 年,當 NetPBM 幾乎沒有任何開發工作時,我發布了一個重要的修補程式版本。因此,我對 PbmPlus 軟體及其簡單的影像檔案格式有很好的理解。 從那時起,它被不同的人重新開發了很多次,並且最終似乎成為了一個真正的開源專案。各種程式似乎越來越成熟,並且開始更好地協同工作。 然而,它的主要問題:缺乏中繼資料和複雜性仍然存在。但作為一種檔案格式,它的簡單性是它最大的優勢,使其成為非常低階的影像和數據處理的理想選擇。 |
TIFF
The TIFF format is the propriety format for PhotoShop. However it is so
bloated with features, and has been modified by just about every application
that has cared to use it, that no program, not even photoshop can handle ALL
its variations. Photoshop however has the best chance at reading it.
I would steer clear of the TIFF image file format unless you are
specifically working with photoshop, or the application accepts no other,
better defined, image file format.
I don't use the TIFF image file format, or Photoshop. If you use this format
with IM extensively, perhaps you would like to submit your findings to me,
to include here. That way you can help your fellow TIFF users.
Whether a specific software package can read a TIFF, all you can do is try
it and see. That is, the problem with this format.
TIFF and Density (resolution) in photoshop...
See Photoshop and Density
for the details and solutions to this problem
JPEG to TIFF conversion...
magick image.jpg image.tif
This will either save the image inside the TIFF file using JPEG compression
(which was inherited from the JPEG input. Or it will error such as...
Error: "JPEG compression support not configured"
This is caused by the TIFF library not including JPEG compression support.
Either way THIS IS BAD.
You can get around this problem by changing the setting to use a different
compression algorithm:
magick image.jpg -compress zip image.tif
magick image.jpg -compress lzw image.tif
magick image.jpg +compress image.tif
WARNING: -compress Group4 with a TIFF works, but ONLY if you remove all
transparent and semi-transparent pixels from the image. Typically you can
make sure this is done the same way as JPEG images above, using
-background {color} -alpha remove
See Removing Transparency from Images
just before the final save (the first only works for single images).
TIFF (and MIFF) floating point precision files (Add to IM v6.2.6-5)...
This is especially good for HDRI image processing (which uses floating point
inside IM itself)
For single precision (float) set...
-depth 32 -define quantum:format=floating-point
For do8uble precision (doubles) set...
-depth 64 -define quantum:format=floating-point
14 bit TIFF images...
magick logo: -sharpen 0x1 -depth 14 logo.tif
tiffinfo logo.tif
Image Width: 640 Image Length: 480
Resolution: 72, 72 (unitless)
Bits/Sample: 14
Compression Scheme: LZW
Photometric Interpretation: RGB color
FillOrder: msb-to-lsb
Orientation: row 0 top, col 0 lhs
Samples/Pixel: 3
Rows/Strip: 2
Planar Configuration: single image plane
DocumentName: logo.tif
Software: ImageMagick 6.2.8 07/27/06 Q16 https://imagemagick.dev.org.tw
12 bit TIFF images...
To magick 16-bit TIFF images to 12-bit:
magick image.tif -depth 12 image-12.tif
Pure black and white images...
magick image ... -type truecolor -type bilevel image.tiff
Results in normal images and the smallest filesize, and correct
black/white handling in Photoshop, Microsoft Windows Picture and Fax
Viewer.
TIFF discussion,
RQuadling.
Enden and fill-order
The order in which TIFF data values are stored is controled by
-endien Global order of the bytes
-define tiff:endian Tiff format container endian
-define tiff:fill-order Bit order within a byte
Each takes a value of either MSB (default) or LSB, however
the "tiff:fill-order" will be set to the value of "tiff:endian"
if that is defined, but not from the global endian value.
The "tiff:endian" property is the endianess of the image container. The
"-endian" property is the endianess of the image pixels. They may differ.
Save a TIFF file format with only one row pre strip
-define tiff:rows-per-strip=1.
To save more rows per stripe increase the number
-define tiff:rows-per-strip=8
You can also specify the 'endian' ordering for binary integers in the format
-endian MSB -endian LSB
For smaller TIFF images (other than by compression, you can also try to
use options and settings like -depth 8 to reduce the color quality
or -alpha off to remove the alpha or transparency channel from the image.
IM will save a greyscale image as a greyscale TIFF, if no non-grayscale
colors are present. You can force it to save as non-greyscale with
-depth 8 -type TrueColor
Added IM 6.6.4-3
Allow you to set the "Software Creation:" meta-data (property)
to something other than "Image Magick 6.**"
-set tiff:software "My Software"
Windows Picture and Fax Viewer, Windows Explorer
These can can only display TIFFs that have certain Photometric
Interpretation values, such as RGB. IM Options...
-compress LZW -type TrueColor
toggle the photometric interpretation (Added IM 6.3.2-10)
-define quantum:polarity=min-is-black
-define quantum:polarity=min-is-white
Multi-Page TIFF
If you want to split a multi-page tiff into separate pages, IM may have
problems as it will still use up a lot of memory to hold previous pages
even if you use a command like...
magick "a.tif[i]" b%03d.tif
This might be regarded as a bug, or perhaps a future improvement.
The better solution may be the non-IM "tiffsplit
" program.
TIFF and EXIF profiles
Cristy reported: The libtiff delegate library supports the EXIF profile
but it was unreliable and caused faults too often so we commented out the
call.
To get the EXIF attributes try this.
magick identify -verbose -define tiff:exif=true image.tif
TIFF 格式可以使用剪切路徑的形式來包含點陣圖遮罩,可以使用「-clip
」運算符來啟用。您可以使用該「剪切」遮罩使用該路徑來遮罩您的影像...
magick image_clip.tif -clip \ ...do_various_operations... \ +clip-mask image_masked.png |
BMP,Windows 點陣圖
The Windows desktop icon image format BMP (short for bit-mapped) is a very unfriendly image format and should probably be avoided if possible. ImageMagick supports 8, 24, and 32-bit BMP images. Add -colors 256 to the end your command line (before the output image filename) to create a 8 bit colormapped BMP image rather than a 24 bit BMP format. Extra colors can be added to images after performing operations like rotates, and resize. See Color Quantization for more info on -color. The presence of any transparency controls whether it uses a 24 (RGB) or 32 bit (RGBA) format BMP image. You can use "-alpha off" to turn off transparency in an image. If all colors are gray-scale a 'directcolor' greyscale image is generated. I think -type truecolor will stop this behaviour. If you have an older program cannot read the default BMP4 images written by ImageMagick, (for example a Windows Background Image), you can enforce the generation of a BMP3 format image using... magick image BMP3:image.bmp This format should have no transparency and should be a 'printable image', whatever that means. In other words 'Windows' compatible. However, if a PNG input file was used and it contains a gAMA and cHRM chunk (gamma and chromaticity information) either of which forces "magick" to write a BMP4. To get a BMP3 you need to get rid of that information. One way may be to pipeline the image though a minimal 'image data only' image file format like PPM and then re-save as BMP3. Messy, but it should work. magick image.png ppm:- | magick - BMP3:image.bpm IM can not produce BMP's at depth levels other than 8. However you can use NetPBM image processing set to do the final conversion to other depth levels (This needs at least a Q16 version of IM)... magick image -alpha off -colors 16 ppm:- |\ pnmdepth 4 | ppm2bmp > image.bmp Format limitations.... The header for a BMP2: format only allows the description of the width, height and bit depth (bits per pixel) of an image. The bit depth can be one of 1, 4, 8 or 24. For comparison, the bmp3: format allows bit depths of 0, 1, 4, 8 ,16, 24 and 32 and has extra fields which specify x and y resolution (in pixels per metre) and compression of the image data.
ICO
To create a multi-resolution ICO format image simply create all the image sizes you require and write them all to the same ICO file. magick icon-16.bmp icon-32.bmp icon-64.bmp \ icon-128.bmp icon-256.bmp myicon.ico Update magick icon-256.png \ -define icon:auto-resize="256,128,96,64,48,32,16" \ myicon.ico You can now add this to you web pages using <LINK REL="shortcut icon" HREF="myicon.ico"> However many web browsers will now accept most image formats, not just the ICO format.
RAW 相機影像格式(CRW、CR2、NEF、X3F 等)
Most digital cameras, with the exception of the Sigma Foveon sensor and some Sony cameras, magick the image produced by the lens into digital data by using millions of sensors which detect the brightness of one specific colour, Red, Green or Blue. In order for the camera to respond to colour in approximately the same way that the human eye does, there are twice as many green sensors as there are of red or blue because our eye is much more sensitive to green light. The sensors are arranged in what is called a Bayer array. For a description and diagrams of this arrangement see, for example, Understanding Digital Camera Sensors. The conversion of the data from a Bayer array into the more familiar RGB pixels requires a process called demosaicing. Once this operation has been done we still do not have an image worth displaying. Even with the extra green pixels, the camera's sensor still does not perceive colour the way we do. If you take a piece of white paper and look at it in bright sunlight and then go indoors and look at it under a fluorescent light, it will look white under both conditions. But if you photograph the sheet of paper under those same conditions using default camera settings, the paper will show slightly different colours when displayed on a screen. The reason is that although the back of our retinas will "see" the same light reflected off the paper as does the camera, our brain will interpret that light for us and we will perceive the paper as white. The camera simply measures the amount of red, green and blue light reflecting off the paper and under a fluorescent light there will be more blue light than there is under sunlight so the paper in that image will look bluer than the one taken in sunlight. To produce images which both show a white sheet of paper requires that they be "white balanced", also referred to as gray balanced or colour balanced. For more about white balancing see Understanding White Balance There are still other aspects of the raw file which must be done, such as setting a correct gamma, but without going into further detail it is clear that the raw file needs a lot of processing before it can become an image that we can view on a monitor. Camera raw files are often referred to as digital negatives. If you take a photo and have the camera generate a JPG image, it will have done the demosaicing and all the other adjustments. But if, for example, you forgot to set the correct white balance in the camera before taking the photo, you can't really do much with the JPG to correct the situation because so much information about the original image has been lost. If, on the other hand, you had produced a raw file from the camera instead of a JPG, during the conversion from raw you can choose a particular white balance setting along with other parameters and if the resulting image doesn't look right you can go back, change the settings and magick it again until it does look right. This is similar to the ability to produce more prints from film negatives. Without the film negative you wouldn't be able to get an 8x10 blowup of one of the 4x6 snapshots you get when the film was first developed. While ImageMagick can handle a large variety of different formats, it does not 'know' how to magick raw camera files, so IM uses the "dcraw
" program as a delegate program to magick the raw file into a format that it does understand, either a TIFF (with the '-T
' flag) or PNM. Note that it is designed for raw camera images, and not those from, for example, a scanner. The "dcraw
" program can handle a large number of different raw formats including those from cameras manufactured by Canon, Fuji, Kodak, Nikon and Sony. You can determine whether "dcraw
" will recognize your raw files by asking it to identify a sample. For example the command
|
|
-list delegate
」列出)呼叫 dcraw 進行轉換時,會指定兩個影響影像處理的標誌
|
-w
」旗標表示 dcraw 會使用原始檔案中的白平衡資訊(如果找得到)。如果找不到資訊,dcraw 會使用整個影像的平均值作為白平衡的基準。「-4
」旗標表示 dcraw 只會對原始照片進行去馬賽克和白平衡,並將結果輸出為「16 位元線性影像」(每個像素 48 位元),適用於 IM 預設的 Q16 版本。由於「-w
」和「-4
」是唯二指定的影像處理旗標,因此 dcraw 會使用一些預設值。輸出色彩空間將為 sRGB,且不會進行 ICC 描述檔嵌入(在我的系統上,dcraw 編譯時沒有 LCMS 函式庫,因此無法嵌入描述檔)。設定「-4
」旗標表示已省略許多處理步驟,包括色階調整和伽瑪校正,因此產生的影像「看起來會很暗」。目的是讓使用者可以使用影像編輯器(例如「Photoshop」或「Paint Shop Pro」,甚至「ImageMagick」)處理影像,並自行調整色階、伽瑪等。在這種情況下,影像應輸出為支援每個色彩通道 16 位元的格式。(例如 TIFF)。「注意」,dcraw 產生 16 位元檔案並不表示所有 16 位元都包含有用的數據。例如,Canon 10D 數位單眼相機的原始影像每個色彩通道有 10 位元。Canon 和其他製造商更新的相機每個色彩通道有 14 位元。如果您想將原始照片完全轉換,則必須移除「-4
」旗標,以便 dcraw 進行去馬賽克、白平衡、亮度和伽瑪校正等。在這種情況下,dcraw 會輸出「8 位元檔案」(每個像素 24 位元)。如果您要進一步處理此影像,最好將其輸出為 PNG,並避免 JPEG 壓縮失真。JPEG 格式應該只在實際使用的最後步驟中使用。事實上,在影像處理的中間步驟中使用無失真格式(例如 PNG 或 IM 內部格式 MIFF)始終是個好主意。可以新增一個特殊的 DCRaw 委託,讓您可以控制如何讀取「原始」相機影像格式。如需更多資訊,請參閱 DCRaw 網站,以及 DCRaw 教學網站,其中包含有關 dcraw 許多可選旗標的資訊,包括使用各種旗標的原始影像直方圖。另請參閱 DCRaw 範例。以上說明最初摘錄自 IM 論壇主題 轉換 RAW 影像,由「jhfry」撰寫,並由「el_supremo」進行大幅改寫。MPEG、M2V 和 AVI 電影
IM is not very efficient at creating movies. It will do the job though requires the external program "mpeg2encode" to do much of the dirty work. The problem is that IM is not designed to handle video, but static images or small sequences of images. That is, not to say it can't do it, but that is not its goal. In particular it generally reads in all images into memory and process them from there. For a large or long video this is not very efficient. For processing on a small sequence of frames however it really can't be beat. In fact just about every Linux Video manipulation program uses ImageMagick to generate titles, fancy scene changes, and other effects to complete the post-processing development of a larger video development. The process however is kept to small video sequences. However lets have a look at what IM can do. Frames to Video There are some reports that unless the images are the right aspect ratio is correct this will fail on older mpeg players, use the MPEG II extension (m2v:) instead. Also use m2v to avoid heavy compression pixelization that can occur using... magick *.jpg glacier.mpg EG instead use... magick *.jpg m2v:glacier.mpg Note you may need lots of temporary space to do a large animations You can specify a different directory from the normal /tmp using... setenv MAGICK_TMPDIR /data magick -limit memory 0 -limit map 0 *.jpg image.m2v Alternatives... To converting PNG images to MPEG2 Video streams, instead of MNG Multi PNG-files, use the following delegation... png2yuv -j file%08d.png -I p -f 25 -b 1 | \ mpeg2enc -f 3 -q 3 -b 5000 -o out.m2v For more info see mjpeg.sf.net IM forums reported decent results with an open source project called "ffmpeg", which seems to be a fairly standard linux package install. ffmpeg -f image2 -i %03d.jpg -vcodec mjpeg -y anim.mpg Extracting an MVG with a transparent background magick -background none -size 320x240 sample.mvg out.png Michael Lenh wrote... I finally was able to create a very sexy video using mplayer mencoder "mf://data/p*.png" -mf fps=40 -o particle.avi -ovc lavc You can see the results at... http://www.mathematik.uni-ulm.de/~lehn/particle.avi http://www.mathematik.uni-ulm.de/~lehn/temperature.avi mabu in a IM Forum Discussion said to "USE MENCODER, wow it's like 1000 times faster and actually WORKS"... mencoder -nosound mf://*.jpg -mf w=800:h=371:type=jpg:fps=15 -ovc lavc -lavcopts vcodec=mpeg4:vbitrate=2160000:mbd=2:keyint=132:v4mv:vqmin=3:lumi_mask=0.07:dark_mask=0.2:mpeg_quant:scplx_mask=0.1:tcplx_mask=0.1:naq -o output.mpg It probably has extra options I don't need but it makes a nice time-lapse from .jpg files. Dean S. Messing uses transcode... find . -type f -name '*.png' | sort > filelist transcode -x imlist,null\ --use_rgb\ -y raw,null\ -f 60\ -i filelist\ -g 4096x2160 \ -j 540,1024,540,1024\ -o video.avi\ -H 0 You can leave out -j (clip window) if you want. -g is output size. Wolfgang Hugemann suggests a new alternative known as 'VirtualDub' under Windows Vista, which will let you run a video, or magick directly from a folder of image frames. WARNING: "mplayer
" apparentally does not like mpeg file with only one frame. "ffplay
" however seems to have no problems. Video to Frames Both "mplayer
" and "mencode
" are more efficient at converting video into a series of frames than IM is. On top of this is can handle just about any video (and audio) codec available. For example to grab 5 frames from 1 1/2 minutes into a video, scaled to 320x240, you can use... mplayer file.mov -vf scale=320x240 -ss 01:30 -ao null \ -vo png:z=3 -frames 5 Other alternatives include the "ffmpeg
" open source library, though that is also part of the "mplayer
" handling.
MNG,多影像網路圖形
由 Barry Loo 從 範例 Ming 動畫 討論中提供。MNG(發音為 ming)是一種基於 PNG 的開放格式,提供 GIF 和其他格式的動畫點陣圖替代方案。它允許透明度(半透明和完全透明)、壓縮(失真和無失真)以及高達 32 位元的色彩深度。增加的色彩深度是這種格式與其他格式的不同之處。GIF 總共僅支援最多 256 種顏色,這對於許多圖形來說已經足夠;但是,照片和漸層會受到影響。在建立 GIF 動畫時可以使用的多數動畫選項也可以用於建立 MNG。
|
![]() |
DPX,數位圖片交換格式
此格式用於電影和特效產業,特別利用其豐富的標頭資訊以及格式的靈活性,能夠使用 RGB 或 YCbCr 像素描述,以各種位元深度處理高動態範圍和對數色彩值。它基於柯達的 Cineon 格式,但很大程度上取代了後者,後者擁有更針對電影的標頭。其用途的一個例子是掃描電影以供後期製作使用。每個影格都儲存為一個獨立的 .dpx 檔案,範圍從 2k(2048 像素寬)到 8k(8192 像素寬 - 適用於 IMAX 影格),每個色彩分量介於 8 到 64 位元之間。然後可以使用合成軟體處理這些序列,改變顏色或添加視覺效果。完成後,可以將它們數位錄製到磁帶上或投影回膠片上。每個像素的色彩值通常以對數方式儲存(特別是如果序列注定要轉回膠片上),這更自然地反映了原始膠片乳劑中色彩資訊儲存的密度。如果沒有改變,對數檔案看起來對比度非常低,因此需要一個「查找表」將對數影像轉換為類似於將影像轉回膠片並在電影院放映時所看到的內容。除了使影像線性化(如大多數典型的電腦影像)和調整伽瑪值之外,此表還設定了黑點和白點的位置。對於一個 10 位元對數影像,其中每個色彩分量的值範圍從 0 到 1023,黑點和白點通常設定為 95 和 685。這意味著對數檔案儲存的色彩值比線性版本顯示為純白色的顏色更亮,比顯示為純黑色的顏色更暗。因此,這些額外資訊對於可能希望在將影像儲存為 dpx 檔案後改變其亮度的特效藝術家來說仍然可用。舉例來說,如果這些資訊丟失,則均勻降低影像的亮度將導致高光區域變暗,而有了這些額外資訊,高光區域反而會縮小並開始顯示以前太亮而無法看到的細節。後者更接近於現實世界中發生的事情。標頭可以包含與製作相關的電影和/或電視特定數據。例如,電視標頭可以包含 SMPTE 時間碼,以便在添加任何特效後,可以輕鬆替換從製作編輯中匯出為 dpx 序列的鏡頭。膠片標頭包含有關影格來源膠片卷和拍攝期間使用的各種相機設定的資訊。所有這些細節將隨著影像在後期製作公司之間傳遞而保留下來。將時間碼添加到 DPX 檔案
您可以使用以下方法將時間碼添加到任何 dpx 檔案
|
以上內容的副本已添加到主要的 IM 文件中,網址為 動態影像格式簡介。以上內容由 Seth Dubieniec <seth.info_AT_dubieniec.co.uk> 提供,摘錄自 IM 論壇上關於 DPX 格式的長期討論。他目前正在開發 DPX 應用程式,因此未來可能會提供更多 DPX 相關資訊。
Extra Notes (unformatted)... Adding -depth 10 causes IM to output a 10 bit DPX file. -- James Fancher If you want to set the gamma, for example, in the output DPX image... -define dpx:television.gamma=1.7 The colorspace of the DPX image is defined by the image element descriptor and transfer-characteristic. If the transfer characteristic is PrintingDensityColorimetric we set the colorspace to LogColorspace. Only if the colorspace is Log do we apply the gamma and black/white points to convert to the RGB colorspace. Its possible the program you are using is not conforming to the SMPTE standard or ImageMagick is not interpreting the standard correctly. Post an URL to your two DPX images and we will download and try to determine if ImageMagick has a bug or if the program you are using is buggy. The following will work with ImageMagick 6.3.8-3 magick -colorspace log AfterEffectsFile.dpx -set gamma 0.5 \ -set reference-black 95 -set reference-white 685 image.jpg Alternatively, take a look at the SMTPE documentation -- Cristy You can add text user data to the dpx file by using magick image.dpx -set dpx:userdata "some text" new.dpx -- Cristy
PSD
PSD 影像檔案是 Photoshop 的工作影像檔案格式,就像 XCF 是 GIMP 的工作檔案格式,而 MIFF 是 ImageMagick 自己的工作檔案格式。它們通常包含多個影像,第一個影像是當前工作影像的完整合併。這對於查看工作影像的當前狀態很有用,通常用於「縮圖」。多影像檔案格式中的所有其他影像是用於產生第一個合併影像的影像。也就是說,個別的工作圖層影像是使用者在儲存時正在處理的影像。因此,如果您只想使用「最終」影像,我建議您在輸入檔名後面加上 "'[0]'
",以捨棄工作影像,只使用第一個完整影像。但是,如果您打算使用個別的圖層影像,請使用 " '[1--1]'
" 來跳過第一個影像。如果沒有找到額外的圖層影像,則會改為傳回第一個影像。我不建議使用 "-delete 0
",因為如果第一個影像後面沒有圖層影像,則不會傳回任何影像。補充說明... 如果您能提供更多資訊,或想提交有關使用 IM 處理此格式的摘要,請不吝賜教...For PSD with a CMYK image you may need to get IM to use the right provide when converting (make sure you IM was installed with the LCMS delegate library) .... magick Test_CMYK.psd -strip -profile USWebCoatedSWOP.icc \ -profile sRGB.icc Test_RGB.png See Profiles above for more info. If a PSD image contain a 'preview' image. This image is returned as the last image of a two image read. To ensure IM never reads the last image use... magick test.psd[0--2] -flatten test.jpg That is, read all images, except the last. But always read the first. This can not be done after the read using a "-delete".
WMF
另一種向量格式,常用於 Microsoft Office 程式集的可縮放剪貼畫。可以在讀取影像之前,透過更改「-density
」來縮放輸入影像。另請參閱 向量影像格式。Flash 動畫 (SWF)
IM 目前不支援 Flash 動畫。但為了完整起見,Scott Bicknell 報告說,SWF 工具 公用程式「swfextract
」可以從 Flash 動畫中提取 jpeg 或 png 格式的影格。Wolfgang Hugemann 也認為 Windows 免費軟體工具「IrfanView
」也可以做到這一點。聽起來對我來說是個不錯的委派候選人。網頁轉換為影像 (HTML)
如果 IM 載入 HTML,它會尋找 html2ps 來將 html 轉換為 postscript,然後再將其渲染為影像。這種方法效果不是很好,但可以使用。使用完整的網頁瀏覽器是更好的方法,因為它是專為以最佳方式完成這項任務而設計的。使用瀏覽器的最簡單方法是在瀏覽器中載入頁面,然後截取螢幕畫面。這樣可以獲得完美的頁面影像,但會受限於瀏覽器的視窗大小。另一種方法是讓瀏覽器將頁面輸出為 postscript,而不是讓 IM 將其轉換。這應該可以將網站很好地分頁成較小的頁面。在 LINUX 下,您可以啟動一個虛擬 X Windows 顯示伺服器,其大小足以執行一個顯示整個網站的瀏覽器。這可能是一個非常高的顯示器。然後在其中執行瀏覽器,並將其設定為填滿整個顯示器。載入網站後,再次截取螢幕畫面。我看過一個腳本,甚至可以自動完成整個複雜的過程。但是,您最終可能會得到一個非常長的影像。而且,要確定顯示器的大小也很困難。總之,這並不容易,而且最好的解決方案只會將 IM 用於最終的影像處理,而不是用於 html 到影像的生成。PCL 列印格式
IM PCL 預設為版本 6 PCL。對於版本 5,您需要將影像轉換為黑白影像。例如...
|
Kodak PhotoCD 或 ProPhotoCD (PCD)
Kodak PhotoCD 檔案是一種多解析度影像檔案格式。 也就是說,每個檔案都包含 6 種不同大小的相同影像,形成所謂的「金字塔影像」。 檔案中的第一個影像是最低解析度(最小尺寸),最後一個是最高解析度(最大尺寸為 3072×2048 像素)。 由於使用者通常需要最大解析度的影像進行處理,因此將 PCD 影像轉換為 JPG 等其他格式的方法是從影像檔案中擷取第六個或(索引 5)。 例如...
|
-colorspace RGB
」選項才能正確顯示顏色。 資訊由 Wolfgang Hugemann <ImageMagick_AT_Hugemann.de> 從 Magick-Users 郵件論壇提供。原始 RGB 和灰階資料
Imagemagick 有一些檔案格式用於處理原始影像資料,特別是「RGB:
」和「GRAY:
」。 以及提供定義該資料的設定。 例如,要輸出 RGB 原始資料...
|
-depth
」設定指定寫入(以及稍後讀取)的整數大小。 在這種情況下,每個像素 3 位元組的 8 位元值,用於 RGB(24 位元影像)。 建議您在處理原始影像資料時始終指定適當的深度。 「-depth
」為 16 位元時,將產生每個值 2 位元組,在這種情況下,您可能還需要指定「-endian
」或位元組順序,可以是「MSB
」(最高有效位元組優先)或「LSB
」(最低有效位元組優先,預設值)。 請注意,rgb 僅僅是影像資料,它甚至不包含影像的寬度和高度! 有些應用程式「假設」資料是特定大小,因此您可能需要使用 IM 來確保資料是這個大小。 例如,這會調整影像大小並填充影像,以確保其大小為 512x512 像素。
|
|
-size
」設定中指定「byte_offset」。 例如,跳過 48 位元組的標頭...
|
-size
」設定中的第三個數字的情況。 如需使用原始影像資料(灰階)的更多範例,請參閱 IM 論壇主題 如何將原始影像轉換為壓縮 tif?。浮點資料
You can also read (and write) RGB using normalized floating point numbers. This however requires the use of special coder -define settings. See HDRI floating point file formats https://imagemagick.dev.org.tw/Usage/basics/#hdri_formats RGB floating point Image generated using C Code (HDRI)... float red = 1.0f; float green = 1.0f; /* appropriate data */ float blue = 1.0f; /* for exach pixel in image... */ fwrite (&red, sizeof(float), 1, file); fwrite (&green, sizeof(float), 1, file); fwrite (&blue, sizeof(float), 1, file); Reading Options.... magick -size 200x100 -depth 32 -define quantum:format=floating-point -define quantum:scale=65536.0 -endian lsb input.rgb output.png The quantum:format defines to read floating point numbers from the file. While the -depth defines the floating point size (32 = floats, 64 = doubles). The quantum:scale defines how to scale the floating point numbers from normalized 0.0 to 1.0 values to the in-memory 16bit Quality levels needed by my Q16 version of IM.