ImageMagick mogrify stopped working with a great amount of images - image

When using
mogrify -format png *.ppm
with a couple of images it works, but when I tried with a great amount of files(Around 20 million) it does not show an error message but after a some minutes the CLI will appear as if it had finished the task but when checking my folder I do not have a single png, I work in windows and have 8 Gigabytes of RAM, so I was wondering:
Does ImageMagick has a limit for the quantity of images?
Or is it just that my computer is not powerful enough for the task?
The files have around 400 Megabytes in total.
Also if there is any other way to get the images into png format even if losing the ppm version please let me know.

Did you check your ImageMagick policy.xml file?
It should be at homeDirectory/.config/ImageMagick/policy.xml
There are limitations that you can set in that file.
Might want to check Imagemagick security policy page

Two ideas...
Firstly, use:
mogrify -verbose -format png *.ppm
so you see what's going on.
Secondly, you could try creating a list of files to process like this:
DIR *.ppm /S /B > filelist.txt
Then tell ImageMagick to process that list of files with:
mogrify -format png #filelist.txt
Another idea... try using double quotes:
mogrify -format png "*.ppm"

Related

Issue with Basic Image Magick Convert and Mogrify Functions

I am attempting to convert all .jpg images in a folder to .png format using Image Magick. This functionality is described as a feature of Image Magick here using the mogrify tool. Here's what I type into the command line, followed by the error:
C:\Users\holde\Desktop\Photos and Videos>magick mogrify -format jpg *.png
mogrify: unable to open image '*.png': Invalid argument # error/blob.c/OpenBlob/3527.
Any help is appreciated! If it's useful, I installed the Windows Binary release from this page, and installed via the ImageMagick-6.9.12-32-Q16-HDRI-x64-dll.exe executable on Windows 10.
Edit: Fixed, I had the syntax backwards. I should have used mogrify -format png *.jpg rather than mogrify -format jpg *.png
With this change, the operation now completes. Thanks for the assistance!
Convert all from png to jpg
mogrify -format jpg *.png

A terminal command (Mac) to change the extension of all the files in a folder

I'll try to make this as short as possible.
I have a folder that contains 9000 images (almost). But the extension of these images is png. I would like to change the extension of all these images in one command so they all become .jpg
If someone knows a way to do that can you please share it?
Thank you for your help.
If they are PNG images that you are trying to turn into jpgs, I'd recommend installing Imagemagick (via homebrew), and using the "mogrify" command to change them (see https://www.imagemagick.org/script/mogrify.php):
magick mogrify -format jpg *.png
If they are all actually jpegs, and you've ended up with the wrong file extension, you can do something like:
ls | grep \.png$ | sed 'p;s/\.png/\.jpg/' | xargs -n2 mv
See: Batch renaming files in command line and Xargs (even though it's linux, these tools are all available in the OSX default install)
I did it by using a virtual machine (Windows)
In the cmd I used this command : ren *.* *.jpg and it worked. Although I guess on Mac it's a bit harder.

imagemagick and automator DPI change

I am trying to create a workflow in automator to change DPI from 72 to 300, so that I can use it on any image in Finder (when i right click on the image, then I can run the action).
When I run the command in terminal, it works fine:
mogrify -units PixelsPerInch *.jpg -density 300 *.jpg
However, when I use it in shell script, it does not work, and I can't figure out why. This is what I have so far:
for f in "$#"
do
/opt/ImageMagick/bin/mogrify mogrify -units PixelsPerInch *.jpg -density 300 *.jpg
done
Screenshot from Automator
Any help will be highly appreciated.
mogrify is for batch conversion (thus your *.jpgin the working version) but in your example, you have created a loop to step through files. You don't seem to be using your f variable at all.
You should get the command to work on individual files using the convert command instead of mogrify and then plug in$fwherever the filename would occur.

ImageMagick 'convert -sepia-tone' different on Windows vs. Linux

I have an issue with the 2 images below: the first one is created on Linux, the second one on Windows using the same command, same versions of ImageMagick (6.6.5-0). Tried newer versions of ImageMagick and they all seem to provide different results Windows vs. Linux.
convert c.jpg -sepia-tone 80% 1.jpg (on Linux)
convert c.jpg -sepia-tone 80% 2.jpg (on Windows)
The results are very different and I cannot figure out why.
What am I doing wrong?
(source: selfip.com)
(source: selfip.com)
I actually had to do
convert c.jpg -set colorspace RGB -sepia-tone 80% 1.jpg
basically forcing the use of the RGB colorspace and that solved my problem.
Most likely, the release versions of your ImageMagick installations on Linux and Windows are different in more ways than the mere version numbers...
To verify, run this command and compare the outputs in detail for the two platforms:
convert -version
Additionally, you may want to see how the outputs for convert -list configure differ. (Note, the format of the outputs this command gives is different anyway on the two platforms -- they are not directly comparable).

Convert multiple images in Imagemagick (Windows)

I'm trying to convert multiple .tif files into .png files using Imagemagick on the Windows command line. I tried the following, which didn't work:
convert -format tif *.png
I then tried a loop
for %a in (*.tif) do convert %a %a.png
which did work but now all my images are named as [something].tif.png, which is annoying.
So why didn't the first command work, and if there's no way to get the first command to work, is there a way to improve the second command so I won't have to deal with the .tif in the .png image name?
Edit It seems that I got the first command wrong. First of all, convert doesn't work but mogrify does. I had read that mogrify replaced the files of the old format, but apparently it isn't true because it created new images for me without deleting the old ones. Secondly, it seems that the destination file type comes first, so the command is
mogrify png *.tif
which works perfectly.
I'd still like to know how the second command could be improved.
Why don't you use mogrify?
mogrify -format tif *.png
will create 1.tif from 1.png ... N.tif from N.png.

Resources