ImageMagick 命令列轉換限制值

ImageMagick 命令列轉換限制值

我需要轉換一個非常大的圖像。 Image Magick 的預設資源限制太小了。

圖片魔法網站討論改變限制,但我嘗試過的語法都不起作用,命令無法識別。

例如,我需要將 magick_disk_limit 設定為 25GB 之類的值。然後還會有一系列其他的需要設置,magick_area_limit,magick_height_limit等等,我該如何輸入這些命令?

我嘗試過的是

-limit width 100KP
convert -limit width 100KP
magick_disk_limit 25GB
MAGICK_DISK_LIMIT 25GB

在所有情況下,回應要么是未找到命令,要么是無法識別的資源類型。我還嘗試放入轉換命令,並將所有 -limit 參數定義為命令的一部分,如下所示:

convert -limit 100KP 100KP 100GP 14GiB 100GiB unlimited 5 8 0 unlimited Lunar_LRO_LrocKaguya_DEMmerge_60N60S_512ppd.tif MoonRelief.png

我現在已經嘗試過export MAGICK_DISK_LIMIT=25GiB,但是當我輸入時identify -list resource磁碟限制沒有改變。

convert -limit memory 12GB -limit map 25GiB -limit width 10MP -limit height 10MP -limit area 100GP -limit disk 30GiB Lunar_LRO_LrocKaguya_DEMmerge_60N60S_512ppd.tif MoonRelief.png

產生此警告和錯誤列表

convert-im6.q16: Unknown field with tag 33550 (0x830e) encountered. `TIFFReadDirectory' @ warning/tiff.c/TIFFWarnings/912.
convert-im6.q16: Unknown field with tag 33922 (0x8482) encountered. `TIFFReadDirectory' @ warning/tiff.c/TIFFWarnings/912.
convert-im6.q16: Unknown field with tag 34735 (0x87af) encountered. `TIFFReadDirectory' @ warning/tiff.c/TIFFWarnings/912.
convert-im6.q16: Unknown field with tag 34736 (0x87b0) encountered. `TIFFReadDirectory' @ warning/tiff.c/TIFFWarnings/912.
convert-im6.q16: Unknown field with tag 34737 (0x87b1) encountered. `TIFFReadDirectory' @ warning/tiff.c/TIFFWarnings/912.
convert-im6.q16: Unknown field with tag 42112 (0xa480) encountered. `TIFFReadDirectory' @ warning/tiff.c/TIFFWarnings/912.
convert-im6.q16: Unknown field with tag 42113 (0xa481) encountered. `TIFFReadDirectory' @ warning/tiff.c/TIFFWarnings/912.
convert-im6.q16: width or height exceeds limit `Lunar_LRO_LrocKaguya_DEMmerge_60N60S_512ppd.tif' @ error/cache.c/OpenPixelCache/3837.
convert-im6.q16: no images defined `MoonRelief.png' @ error/convert.c/ConvertImageCommand/3258.

答案1

我以前可以透過 ImageMagick 論壇尋找解決方案

此方法是更改​​ ImageMagick 中處理檔案(稱為policy.xml)中資源限制的設定。在 Ubuntu 18.04 中可以找到/etc/ImageMagick-6.它被設定為唯讀,因此我暫時更改了sudo chmod 777 policy.xml該資料夾中的寫入權限。進行更改後,我將權限切換為744。

這是policy.xml 的相關部分的樣子:

<policymap>
  <!-- <policy domain="resource" name="temporary-path" value="/tmp"/> -->
  <policy domain="resource" name="memory" value="14GiB"/>
  <policy domain="resource" name="map" value="30GiB"/>
  <policy domain="resource" name="width" value="16MP"/>
  <policy domain="resource" name="height" value="16MP"/>
  <policy domain="resource" name="area" value="40GP"/>
  <policy domain="resource" name="disk" value="30GiB"/>
  <!-- <policy domain="resource" name="file" value="768"/> -->
  <!-- <policy domain="resource" name="thread" value="4"/> -->
  <!-- <policy domain="resource" name="throttle" value="0"/> -->
  <!-- <policy domain="resource" name="time" value="3600"/> -->
  <!-- <policy domain="system" name="precision" value="6"/> -->
  <!-- not needed due to the need to use explicitly by mvg: -->
  <!-- <policy domain="delegate" rights="none" pattern="MVG" /> -->
  <!-- use curl -->
  <policy domain="delegate" rights="none" pattern="URL" />
  <policy domain="delegate" rights="none" pattern="HTTPS" />
  <policy domain="delegate" rights="none" pattern="HTTP" />
  <!-- in order to avoid to get image with password text -->
  <policy domain="path" rights="none" pattern="@*"/>
  <policy domain="cache" name="shared-secret" value="passphrase" stealth="true"/>
</policymap>

需要更改的部分已經具有我替換的值,因此我可以處理相關圖像。它們是第3行到第8行,名為「記憶體」的資源到名為「磁碟」的資源。

進行這些變更後,在終端機中檢查會identify -list resource傳回新值。

答案2

你沒有說你嘗試了什麼,我懷疑案例問題「magick_area_limit」與「 」不一樣MAGICK_AREA_LIMIT

但這裡有兩種方法:

imagemagick從腳本 開始:

#!/bin/bash
export MAGICK_DISK_LIMIT=42GiB
export MAGICK_AREA_LIMIT=42MP
# etc ...
imagemagic "$@"

或者,使用env命令:

env MAGICK_DISK_LIMIT=42GiB MAGICK_AREA_LIMIT=42MP imagemagick ...

答案3

我正在使用 ubuntu 20.0.4 LTS 這是 @kimholder 回答的擴展

sudo nano /etc/ImageMagick-6/policy.xml

更改以下行以啟用大尺寸影像轉換。

  <policy domain="resource" name="memory" value="14GiB"/>
  <policy domain="resource" name="map" value="30GiB"/>
  <policy domain="resource" name="width" value="16MP"/>
  <policy domain="resource" name="height" value="16MP"/>
  <policy domain="resource" name="area" value="40GP"/>
  <policy domain="resource" name="disk" value="30GiB"/>

也請閱讀原始答案
https://askubuntu.com/a/1041633/970339

謝謝,希望這能澄清并快速修復。

答案4

我在 VPS 上管理這個問題,並且沒有那麼多資源,所以只需稍微更改這 3 個值:

<policy domain="resource" name="width" value="24KP"/> <!-- default 16KP -->
<policy domain="resource" name="height" value="24KP"/> <!-- default 16KP -->
<policy domain="resource" name="disk" value="3GiB"/> <!-- default 1GiB -->

且圖片7803x19208可以調整大小!

相關內容