1

I need to convert an extremely large image. The default resource limits of Image Magick are far too small.

The Image Magick website discusses changing the limits, but none of the syntaxes I've tried have worked, the commands aren't recognized.

For instance, I need to set the magick_disk_limit to something like 25GB. Then there will be a series of others to set, magick_area_limit, magick_height_limit, etc. How do I enter those commands?

What I've tried is

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

In all cases the response is either command not found, or unrecognized resource type. I also tried putting in a convert command with all the -limit parameters defined as part of the command, like this:

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

I have now tried export MAGICK_DISK_LIMIT=25GiB, but then when I enter identify -list resource the Disk limit hasn't changed.

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

generates this list of warnings and errors

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
    What exactly have you tried? How are the commands not recogized? Please edit your question and clarify, do not use comments. Did you try setting the variables with e.g. export MAGICK_DISK_LIMIT=25GB and running ImageMagick in the same terminal? – dessert May 28 '18 at 21:35
  • @dessert okay, I specified that now. – kim holder May 28 '18 at 21:45
  • 1
    Please try it with an SI prefix, e.g. export MAGICK_DISK_LIMIT=25GB (not GiB!) – that’s what the site you linked says… If you want 25GiB, use …=27GB instead. – dessert May 29 '18 at 7:09
  • @dessert I did it that way because when I list the current resource limits, the disk limit is shown as 1GiB. So I just stuck with the units as shown on my system. Memory and Map are shown in MiB. I have tried asking on the ImageMagick forum now and am about to go through a solution they suggested. – kim holder May 29 '18 at 13:40
2

I was able to find a solution through the ImageMagick forum.

The method was to change the settings for Resource limits in the file handling that in ImageMagick, called policy.xml. In Ubuntu 18.04 that is found in /etc/ImageMagick-6. It is set as read-only, so I temporarily changed the write permissions with sudo chmod 777 policy.xml from within that folder. After making the changes, I switched the permission to 744.

This is what the relevant section of policy.xml looks like:

<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>

The parts that needed changing already have the values I substituted in so I can process the image in question. They are the 3rd to the 8th line, the resource named "memory" to the resource named "disk".

After making those changes, checking in the terminal with identify -list resource returns the new values.

1

You didn't say what you tried, and I suspect a case problem "magick_area_limit" is not the same as "MAGICK_AREA_LIMIT".

but here are two ways:

Start imagemagick from a script :

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

or, use the env command:

env MAGICK_DISK_LIMIT=42GiB MAGICK_AREA_LIMIT=42MP imagemagick ...
  • Define arguments for the MAGICK_MEMORY_LIMIT, MAGICK_DISK_LIMIT, and MAGICK_MEMORY_LIMIT environment variables with SI prefixes (.e.g 100MB). – dessert May 28 '18 at 21:36
  • See imagemagick.org/script/resources.php#disk-limit and read the whole page, and the links. This is no longer about Ubuntu, it's about ImageMagick, and they have a web page. – waltinator May 28 '18 at 21:42
  • @dessert See imagemagick.org/script/resources.php#disk-limit This is no longer about Ubuntu, it's about ImageMagick. – waltinator May 28 '18 at 21:44
  • I have been to the page you mention, but it doesn't explain how to change them, and the way it works in Ubuntu seems to be a bit different too. I don't know about Image Magick not being part of Ubuntu, it was just there without me installing it. The main commands function without first putting 'magick', the way it's done on other OS for which they have an installation package. (I'm trying your solution now.) – kim holder May 28 '18 at 21:50
  • Did you read the whole page? At the end, it says "Define arguments for the MAGICK_MEMORY_LIMIT, MAGICK_DISK_LIMIT, and MAGICK_MEMORY_LIMIT environment variables with SI prefixes (.e.g 100MB). MAGICK_WIDTH_LIMIT, MAGICK_HEIGHT_LIMIT and MAGICK_AREA_LIMIT accepts pixel suffixes such as MP for mega-pixels (e.g. 100MP)." – waltinator May 28 '18 at 22:32

Your Answer

By clicking "Post Your Answer", you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.