Script shell ubuntu for muliptle actions
Script shell ubuntu for muliptle actions
Hello guys !
First I have to thank you, imagemagick devs for your work !
I haven't already used imagemagick but it seems very powerful !
I am on ubuntu (a tech guy installed it for me because i'm not an expert at computers) and I have installed imagemagick from here (http://doc.ubuntu-fr.org/imagemagick)
My problem is every day, I have to add some photos to a website. But those photos have to be transformed to fit with the website in the database, otherwise, the website send an error.
I used to transform each photo with photoshop but it takes me huge time when I have 50 photos...
So can you help me create a shell script to do some transformations ? there are just few.
- all photos in jpg, 72ppp
- if the width is bigger than the length, resize to 480px of width with ratio kept
- if the length is bigger than the width, resize to 560px of length with ratio kept
- make a thumbnail with the prefix "tn_"
- for all thumbnails resize the bigger size to 120px with ratio kept.
and that' all !
For each photo it takes me two or three minutes ! And I have twenty or thirty photos each day to resize !
Can you help me ?
First I have to thank you, imagemagick devs for your work !
I haven't already used imagemagick but it seems very powerful !
I am on ubuntu (a tech guy installed it for me because i'm not an expert at computers) and I have installed imagemagick from here (http://doc.ubuntu-fr.org/imagemagick)
My problem is every day, I have to add some photos to a website. But those photos have to be transformed to fit with the website in the database, otherwise, the website send an error.
I used to transform each photo with photoshop but it takes me huge time when I have 50 photos...
So can you help me create a shell script to do some transformations ? there are just few.
- all photos in jpg, 72ppp
- if the width is bigger than the length, resize to 480px of width with ratio kept
- if the length is bigger than the width, resize to 560px of length with ratio kept
- make a thumbnail with the prefix "tn_"
- for all thumbnails resize the bigger size to 120px with ratio kept.
and that' all !
For each photo it takes me two or three minutes ! And I have twenty or thirty photos each day to resize !
Can you help me ?
- fmw42
- Posts: 25562
- Joined: 2007-07-02T17:14:51-07:00
- Authentication code: 1152
- Location: Sunnyvale, California, USA
Re: Script shell ubuntu for muliptle actions
What is ppp? pixel per inch, pixels per meter, pixels per centimeter?- all photos in jpg, 72ppp
- if the width is bigger than the length, resize to 480px of width with ratio kept
- if the length is bigger than the width, resize to 560px of length with ratio kept
- make a thumbnail with the prefix "tn_"
- for all thumbnails resize the bigger size to 120px with ratio kept.
there is no ppp as far as I know.
Is this the input density/resolution or the desired output density?
- fmw42
- Posts: 25562
- Joined: 2007-07-02T17:14:51-07:00
- Authentication code: 1152
- Location: Sunnyvale, California, USA
Re: Script shell ubuntu for muliptle actions
Here is a quick cut:
You have to cd to your own directory. The results will be put into that directory. Note I added _new to the files as I already had jpg images in that directory and did not want to overwrite. If you don't care, then remove the _new. If you filenames have spaces in them, then this will fail and other additions need to be made to the file to change your spaces to something else and then back to spaces. Or you can modify any file with a space in the name to change it to something like a hyphen or underscore. I used an array of image names found from the unix command ls as I found it generally works better than just a list of filenames.
cd "yourdirectory"
listArr=(`ls`)
num=${#listArr[*]}
for ((i=0; i<$num; i++)); do
inname=`convert ${listArr[$i]} -ping -format "%t" info:`
echo $inname
aspecttest=`convert ${listArr[$i]} -ping -format "%[fx:w/h>=1?1:0]" info:`
if [ $aspecttest -eq 1 ]; then
# width is greater than or equal to height
size=480x480
else
# width is less than height
size=560x560
fi
convert ${listArr[$i]} -resize $size -density 72 -units pixelsperinch ${inname}_new.jpg
convert ${inname}_new.jpg -thumbnail 120x120 -density 72 -units pixelsperinch tn_${inname}_new.jpg
done
If you are on Windows, then this won't work and you need to change according to http://www.imagemagick.org/Usage/windows/
For details on commands, see
-resize http://www.imagemagick.org/script/comma ... php#resize
-thumbnail http://www.imagemagick.org/script/comma ... #thumbnail
image geometry http://www.imagemagick.org/script/comma ... p#geometry
-density http://www.imagemagick.org/script/comma ... hp#density
-units http://www.imagemagick.org/script/comma ... .php#units
string formats at http://www.imagemagick.org/script/escape.php
fx calcs at http://www.imagemagick.org/Usage/transform/#fx_escapes
resizing at http://www.imagemagick.org/Usage/resize/
The rest is unix bash script and you will need to google that to learn more
You have to cd to your own directory. The results will be put into that directory. Note I added _new to the files as I already had jpg images in that directory and did not want to overwrite. If you don't care, then remove the _new. If you filenames have spaces in them, then this will fail and other additions need to be made to the file to change your spaces to something else and then back to spaces. Or you can modify any file with a space in the name to change it to something like a hyphen or underscore. I used an array of image names found from the unix command ls as I found it generally works better than just a list of filenames.
cd "yourdirectory"
listArr=(`ls`)
num=${#listArr[*]}
for ((i=0; i<$num; i++)); do
inname=`convert ${listArr[$i]} -ping -format "%t" info:`
echo $inname
aspecttest=`convert ${listArr[$i]} -ping -format "%[fx:w/h>=1?1:0]" info:`
if [ $aspecttest -eq 1 ]; then
# width is greater than or equal to height
size=480x480
else
# width is less than height
size=560x560
fi
convert ${listArr[$i]} -resize $size -density 72 -units pixelsperinch ${inname}_new.jpg
convert ${inname}_new.jpg -thumbnail 120x120 -density 72 -units pixelsperinch tn_${inname}_new.jpg
done
If you are on Windows, then this won't work and you need to change according to http://www.imagemagick.org/Usage/windows/
For details on commands, see
-resize http://www.imagemagick.org/script/comma ... php#resize
-thumbnail http://www.imagemagick.org/script/comma ... #thumbnail
image geometry http://www.imagemagick.org/script/comma ... p#geometry
-density http://www.imagemagick.org/script/comma ... hp#density
-units http://www.imagemagick.org/script/comma ... .php#units
string formats at http://www.imagemagick.org/script/escape.php
fx calcs at http://www.imagemagick.org/Usage/transform/#fx_escapes
resizing at http://www.imagemagick.org/Usage/resize/
The rest is unix bash script and you will need to google that to learn more
Re: Script shell ubuntu for muliptle actions
I'm really sorry, ppp is in french, ppi in english =D
I googled a little about shell script and if I'm right, there is a "#/bin/bash/" missing at the beginning ! =D
Sorry if I'm wrong, I just begin in creating scripts =S
I have seen all your scripts in your website fred's magick scripts but they look like chinese for me
So I tested it and it works well by copying all with "#/bin/bash" in a sh file !! Thank you very much !!!
But there is just a little thing I forgot... I don't know if it is possible to do it but I still ask:
is it possible to limit the size in KB ?
I remember when I save an image on photoshop, i use "save for web" option to adjust image file to around 30ko (and around 10ko for thumbnail) because some photos won't display if they are too heavy...
Is it possible to limit the file size ?
edit: yeeees!!!! it is possible !!!
I have found this in your scripts !!
http://www.fmwconcepts.com/imagemagick/ ... /index.php
But I don't know how to add it in the script already done...
Can you help me ?
I googled a little about shell script and if I'm right, there is a "#/bin/bash/" missing at the beginning ! =D
Sorry if I'm wrong, I just begin in creating scripts =S
I have seen all your scripts in your website fred's magick scripts but they look like chinese for me

So I tested it and it works well by copying all with "#/bin/bash" in a sh file !! Thank you very much !!!
But there is just a little thing I forgot... I don't know if it is possible to do it but I still ask:
is it possible to limit the size in KB ?
I remember when I save an image on photoshop, i use "save for web" option to adjust image file to around 30ko (and around 10ko for thumbnail) because some photos won't display if they are too heavy...
Is it possible to limit the file size ?
edit: yeeees!!!! it is possible !!!
I have found this in your scripts !!
http://www.fmwconcepts.com/imagemagick/ ... /index.php
But I don't know how to add it in the script already done...
Can you help me ?
- fmw42
- Posts: 25562
- Joined: 2007-07-02T17:14:51-07:00
- Authentication code: 1152
- Location: Sunnyvale, California, USA
Re: Script shell ubuntu for muliptle actions
As a formal script fille you need to add at the top:I googled a little about shell script and if I'm right, there is a "#/bin/bash/" missing at the beginning ! =D
Sorry if I'm wrong, I just begin in creating scripts =S
#!/bin/bash
but you can copy and paste my code into a terminal window and it will run
- fmw42
- Posts: 25562
- Joined: 2007-07-02T17:14:51-07:00
- Authentication code: 1152
- Location: Sunnyvale, California, USA
Re: Script shell ubuntu for muliptle actions
Yes, but what I did in my script you found was basically estimate the size, resize, then check the size and adjust the size again, and iterate until the result is within some tolerance. It is rather tricky. But you can call one script from within another. So you could do your processing, then call my script to get the right size and return the result to your script. However, I am not sure you want to change the size to get the required filesize. You probably want to do something similar but change the jpg compression.But there is just a little thing I forgot... I don't know if it is possible to do it but I still ask:
is it possible to limit the size in KB ?
Re: Script shell ubuntu for muliptle actions
Yes, the dimension of the photos have to stay the same as at the end of the script you made. Only the filesize need to change.fmw42 wrote:However, I am not sure you want to change the size to get the required filesize. You probably want to do something similar but change the jpg compression.
Is it possible to the same thing as downsize but with jpg compression ? The trick like : estimate the size, downgrade the compression of 5%, then check the size and if not lower than 35ko, adjust the jpg compression and iterate until the resultis within the 35ko ?
- fmw42
- Posts: 25562
- Joined: 2007-07-02T17:14:51-07:00
- Authentication code: 1152
- Location: Sunnyvale, California, USA
Re: Script shell ubuntu for muliptle actions
My script downsize used -resize so that it was general for any image type and not just jpg. But it should be possible to change the jpg compression to achieve similar results if the image is always jpg. However, I have not coded/tested that and there will be size limits per the restrictions on jpg compression.jackisbak wrote:Yes, the dimension of the photos have to stay the same as at the end of the script you made. Only the filesize need to change.fmw42 wrote:However, I am not sure you want to change the size to get the required filesize. You probably want to do something similar but change the jpg compression.
Is it possible to the same thing as downsize but with jpg compression ? The trick like : estimate the size, downgrade the compression of 5%, then check the size and if not lower than 35ko, adjust the jpg compression and iterate until the resultis within the 35ko ?
Re: Script shell ubuntu for muliptle actions
It is evident that a 560x560, even in 100% jpeg compression will not be over 10 Mo... =)fmw42 wrote:there will be size limits per the restrictions on jpg compression.
A bitmap of 560x560 by 24 bits is around 7 Mo !
Great ! I hope you will help me when you can...jackisbak wrote:But it should be possible to change the jpg compression to achieve similar results if the image is always jpg
I saw the inside of the script downsize. It is soooo long !!!
Bravo ! I couldn't do it, even if I want to !
Tomorrow, I will be the same... Photo processing all day long... =D
See you tomorrow night.
- fmw42
- Posts: 25562
- Joined: 2007-07-02T17:14:51-07:00
- Authentication code: 1152
- Location: Sunnyvale, California, USA
Re: Script shell ubuntu for muliptle actions
Sorry, but I won't be able to look into this for a week or so and then can make no commitments about implementation.Great ! I hope you will help me when you can...
I saw the inside of the script downsize. It is soooo long !!!
Bravo ! I couldn't do it, even if I want to !
Tomorrow, I will be the same... Photo processing all day long... =D
See you tomorrow night.
Re: Script shell ubuntu for muliptle actions
Don't worry, you help me so much !
Thank you again !
Thank you again !