Bonjour,
Je me creuse la tête depuis deux jours sur google pour trouver une solution à mon problème.
J'ai un serveur qui doit réceptionner tout les jours une dixaine d'images. Toutes les nuits, il doit réduire les images qui sont plus haute que 450 pixels, les renommer et pour finir les envoyer sur un ftp distant.
Renommer et envoyer les images ne me pose pas de problème mais je n'arrive pas a trouver comment faire en sorte que toute les images qui sont plus haute que 450 pixels soit réduite à cette dernière.
Histoire de rigoler encore plus : le serveur tourne aujourd'hui sur l'OS du mal (Windows) et va heureusement migrer dans l'année sur du GNU&Linux. Mais comme ce script doit tourner maintenant et que je ne veux pas tout refaire dans 6 mois, il faut absolument que j'utilise des logiciels libre disponible sur les deux plateformes (et qui soit stable sur les deux aussi). Bref aujourd'hui j'ai ImageMagick et Perl à ma disposition mais je ne trouve rien qui puisse m'aider.
Merci d'avance.
# Avec ce que tu as
Posté par LaBienPensanceMaTuer . Évalué à 5.
[binarym@rei]:~/public_html/vrac% identify DSCN4426.jpg
DSCN4426.jpg JPEG 1704x2272 DirectClass 1000kb 0.000u 0:01
[binarym@rei]:~/public_html/vrac% identify DSCN4426.jpg | perl -ne 'if(/(\d+)x(\d+)/) { if ($1 > 450) { `convert -resize 450x DSCN4426.jpg DSCN4426-resized.jpg` } }' && identify DSCN4426-resized.jpg
DSCN4426-resized.jpg JPEG 450x600 DirectClass 123kb 0.000u 0:01
[^] # Re: Avec ce que tu as
Posté par genma (site web personnel) . Évalué à 1.
[^] # Re: Avec ce que tu as
Posté par LaBienPensanceMaTuer . Évalué à 1.
Après, il suffit de mettre des retours chariots bien placés et tout va mieux:
identify DSCN4426.jpg | perl -ne '
if(/(\d+)x(\d+)/) {
if ($1 > 450) {
`convert -resize 450x DSCN4426.jpg DSCN4426-resized.jpg`
}
}
' && identify
(désolé, mais linusquèfèr mange l'indentation ...)
Mais bon, pour une personne qui connait un minimum Perl (ce qui est à priori le cas de Philou) ça se lit plutôt bien...
# Avec ImageMagick et un peu de bash (et consors)
Posté par Ph Husson (site web personnel) . Évalué à 4.
height=$(identify $file | awk '{print $3}'|awk -F 'x' '{print $2}')
if [ height -geq 450 ];then
convert -scale x450 $file $out_file
fi
Ce qui doit pouvoir se traduire tres facilement en perl (quand on connait un minimum le perl ce qui est pas mon cas).
Les commandes identify & convert font partie de ImageMagick donc ne devraient pas poser de probleme.
# ImageMagick
Posté par liberforce (site web personnel) . Évalué à 5.
widthxheight : Maximum values of height and width given, aspect ratio preserved.
convert -resize 1024x450 avec 1024 comme longueur max (à remplacer par un autre nombre cohérent avec les images à traiter) et 450 comme hauteur max.
Plutôt que de chercher avec google, tu aurais mieux fait de chercher directement sur le site d'imagemagick, d'autant que tu connaissais l'outil...
[^] # Re: ImageMagick
Posté par liberforce (site web personnel) . Évalué à 2.
[^] # Re: ImageMagick
Posté par Mr Kapouik (site web personnel) . Évalué à 1.
Donc sauf erreur de ma part : le manuel ne m'est pas utile pour mon cas plutôt particulier visiblement.
[^] # Re: ImageMagick
Posté par Jacques L'helgoualc'h (site web personnel) . Évalué à 3.
[^] # Re: ImageMagick
Posté par Christophe Duparquet (site web personnel) . Évalué à 4.
Ben si ! Mais faut pas s'attendre à ce que le manuel liste toutes les combinaisons d'options !
Voir les paragraphes « Only Shrink Larger Images ('>' flag) », « Only Enlarge Smaller Images ('<' flag) », le lien « -resize » puis le lien « Image Geometry » :
indy@hal:~$ identify 001.jpeg
001.jpeg JPEG 640x480 640x480+0+0 DirectClass 8-bit 46.4746kb
indy@hal:~$ convert 001.jpeg -resize x400\> out.jpeg
indy@hal:~$ identify out.jpeg
out.jpeg JPEG 533x400 533x400+0+0 DirectClass 8-bit 33.6484kb
indy@hal:~$ convert 001.jpeg -resize x800\> out.jpeg
indy@hal:~$ identify out.jpeg
out.jpeg JPEG 640x480 640x480+0+0 DirectClass 8-bit 45.5918kb
« J'ai pas Word, j'ai pas Windows, et j'ai pas la télé ! »
[^] # Re: ImageMagick
Posté par Mr Kapouik (site web personnel) . Évalué à 4.
mogrify -resize "x450>" *
Pardon aux familles et tout et tout et merci pour l'aide !
[^] # Re: ImageMagick
Posté par bertrand . Évalué à 0.
:)))
# GMIC
Posté par Olivier LEMAIRE (site web personnel) . Évalué à 2.
Il me semble que tu peux faire ça avec GMIC sur lequel tu trouvera des information a l'adresse suivante:
http://gmic.sourceforge.net/documentation.shtml
J'ai vérifié et il est disponible pour W$ et certaines distributions GNU/Linux. Il permet entre autre de traiter des images ou des série d'images.
Tu dois pouvoir inclure ça dans un script tout simple.
Olivier
Les logiciels de traitement de texte sont à la rédaction ce que la 2CV est à l'automobile, une vieille voiture dont on se souvient avec nostalgie mais technologiquement dépassée
[^] # Re: GMIC
Posté par David Tschumperlé (site web personnel) . Évalué à 3.
gmic image.jpg --dimensions --[1] 450 -if @\{1,1\} -+[1] 450 -/[1] @\{1,1\} -*[1] 450 -r[0] @\{1,0,1\},1,100%,2 -endif -k[0] -o output.jpg
David.
[^] # Re: GMIC
Posté par Ph Husson (site web personnel) . Évalué à 3.
[^] # Re: GMIC
Posté par Nicolas Boulay (site web personnel) . Évalué à 1.
"La première sécurité est la liberté"
[^] # Re: GMIC
Posté par David Tschumperlé (site web personnel) . Évalué à 1.
# en python
Posté par palm123 (site web personnel) . Évalué à 3.
j'ai mis des commentaires pour rappeler l'indentation disparue à l'affichage
import Image,sys
from decimal import Decimal
img = Image.open('%s/%s' % ('/home/gg', sys.argv[1]))
(width, height) = img.size
print img.size
(max_width, max_height) = (475, 1000)
ratio = Decimal(width)/Decimal(height)
target_ration = Decimal(max_width)/Decimal(max_height)
if width > max_width:
width = max_width; #tabulation disparue à l'affichage
height = Decimal(width)/ratio# là aussi
#if height is still bigger than target ie
#above condition wasnt met then check height
if height > max_height:
height = max_height # tabulation
width = Decimal(height)*ratio #tabulation
img_resize = img.resize((width, height), Image.ANTIALIAS)
img_resize.save('%s/%s' % ('/home/gg', sys.argv[1]), quality=85)
ウィズコロナ
[^] # Re: en python
Posté par hocwp (site web personnel) . Évalué à 3.
Parce que du perl sans tabulation ça passe mais pour du python c'est limite :)
Suivre le flux des commentaires
Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.