Üdv!
Van egy olyan problémám, hogy egy képet szeretnék megadott méretűre alakítani, mondjuk 128x128- asra. Ez még így megy is:
convert -resize 128x128! inp.jpg out.jpg
Ezzel ugye semmi gond, csak torzítja a képet. Nekem arra lenne szükségem, hogy ne legyen torz a kép. A három együtt ugye nem oldható meg (mármint az, hogy 128x128- as legyen, ne legyen torz, és a teljes kép meglegyen az adott méretben.).
A méretnek mindenképpen egyeznie kell, a torzítás sem túl jó, viszont információ veszhet. Valószínűleg 2 esetet külön kell bontani az ábra szerint. Amikor a kép
x
mérete nagyobb, mint az
y
és fordítva (ha egyenlő, akkor tiszta ügy :- ) ).
Az ábrán látható "piros" megoldás érdekelne, tehát mindig a sarkoktól, de érdekességképpen a sárga is :- ).
Tudna valaki segíteni? Igazából a méreteket könnyen meg tudom szerezni identifyvel, de jó lenne ha egy converttel meg lehetne oldani az egészet (gyakran hívogatódna ez a kis shell script).
Köszi.
- 1421 megtekintés
Hozzászólások
Megoldás a pirosra:
convert -crop 500x500 -scale 128x128 valamibe.jpg valamiki.jpg
Megoldás a sárgára:
convert -crop 500x500+0+100 -scale 128x128 valamibe.jpg valamiki.jpg
A +0 vízszintes eltolás +100 függőleges eltolás. Természetesen az oofset lehet negatív is. Az offset hatását a -gravity kapcsoló befolyásolja, de alapban a 0,0 koordináta morthwest azaz balfelső sarok a képen.
--
"Maradt még 2 kB-om. Teszek bele egy TCP-IP stacket és egy bootlogót. "
- A hozzászóláshoz be kell jelentkezni
Szia!
Köszi, kipróbáltam, de igazából nem működik, nem tudom, hogy én rontottam- e el valamit, pedig kipróbáltam pár dolgot:
convert -crop 616x616 -scale 128x128 in.jpg out.jpg
$ identify *
in.jpg JPEG 816x616 DirectClass 150kb 0.010u 0:01
out.jpg[1] JPEG 128x97 DirectClass 13kb 0.000u 0:01
2 lépésben még úgy megoldható lenne, hogy először csak
-crop 616x616
, és utána
-resize 128x128
, de nem lehet valahogy összevonni a kettőt?
- A hozzászóláshoz be kell jelentkezni
fisher@dudu:/tmp$ convert -crop 500x500+0+0 -scale 128x128 a.jpg b.jpg
fisher@dudu:/tmp$ identify *.jpg
a.jpg JPEG 800x1200 800x1200+0+0 8-bit DirectClass 98.8kb
b.jpg[1] JPEG 128x128 128x128+0+0 8-bit DirectClass 3.14kb
:)
Ha nem adsz meg offsetet akkor a crop huncut, és több képet is kivág a forrásból. De néha az a jó:
fisher@dudu:/tmp$ convert -crop 500x500 a.jpg b.jpg
fisher@dudu:/tmp$ identify *.jpg
a.jpg JPEG 800x1200 800x1200+0+0 8-bit DirectClass 98.8kb
b-0.jpg[1] JPEG 500x500 500x500+0+0 8-bit DirectClass 34.2kb
b-1.jpg[2] JPEG 300x500 300x500+0+0 8-bit DirectClass 19.2kb
b-2.jpg[3] JPEG 500x500 500x500+0+0 8-bit DirectClass 25.1kb
b-3.jpg[4] JPEG 300x500 300x500+0+0 8-bit DirectClass 12.1kb
b-4.jpg[5] JPEG 500x200 500x200+0+0 8-bit DirectClass 7.55kb
b-5.jpg[6] JPEG 300x200 300x200+0+0 8-bit DirectClass 7.08kb
- A hozzászóláshoz be kell jelentkezni
Jahm. Reggel, ebredes utan, kave elott ez valahogy kimaradt.
--
"Maradt még 2 kB-om. Teszek bele egy TCP-IP stacket és egy bootlogót. "
- A hozzászóláshoz be kell jelentkezni
Próbáltam én offsettel is, de így sem akarja az igazat:
guest@hho:/tmp/t$ ls -l
total 156
-rw-r--r-- 1 guest guest 153595 2009-10-02 10:36 a.jpg
guest@hho:/tmp/t$ identify a.jpg
a.jpg JPEG 816x616 DirectClass 150kb
guest@hho:/tmp/t$ convert -crop 500x500+0+0 -scale 128x128 a.jpg b.jpg
guest@hho:/tmp/t$ ls -l
total 172
-rw-r--r-- 1 guest guest 153595 2009-10-02 10:36 a.jpg
-rw-r--r-- 1 guest guest 12952 2009-10-02 10:37 b.jpg
guest@hho:/tmp/t$ identify *
a.jpg JPEG 816x616 DirectClass 150kb
b.jpg[1] JPEG 128x97 DirectClass 13kb
guest@hho:/tmp/t$
Kipróbáltam 2 gépen is, egy debian sarge- n, és egy etchen. Verziók:
Version: ImageMagick 6.0.6 01/28/06 Q16 http://www.imagemagick.org
Copyright: Copyright (C) 1999-2004 ImageMagick Studio LLC
, ill.:
Version: ImageMagick 6.2.4 02/10/07 Q16 http://www.imagemagick.org
Copyright: Copyright (C) 1999-2005 ImageMagick Studio LLC
.
Valakinek valami egyéb ötlet? Vagy rosszul írok valamit? Direkt átneveztem a.jpg- re, és egérrel másoltam :- ).
- A hozzászóláshoz be kell jelentkezni
Version: ImageMagick 6.5.5-3 2009-08-27 Q16 OpenMP http://www.imagemagick.org
Azok borzalmasan régiek :)
sudo aptitude install -t unstable imagemagick
Ha nincs benne az unstable ág, akkor tedd bele a kedvenceidet a /etc/apt/sources.list-be, illetve:
fisher@zsebi:/tmp$ cat /etc/apt/apt.conf.d/99-pref-distrib
APT::Default-Release "testing";
Bár ez lehet, hogy nem is kell, mert:
fisher@zsebi:/tmp$ cat /etc/apt/preferences
Package: *
Pin: release a=stable
Pin-Priority: 700
Package: *
Pin: release a=lenny
Pin-Priority: 700
Package: *
Pin: release a=testing
Pin-Priority: 650
Package: *
Pin: release a=unstable
Pin-Priority: 600
Package: *
Pin: release a=sid
Pin-Priority: 600
És utána szuper lesz minden.
- A hozzászóláshoz be kell jelentkezni
Scale helyett probald meg a -size -t.
Ha vegkepp nem megy akkor stupid modeban:
convert -crop 500x500+0+0 a.jpg temp.jpg && convert -size 128x128 temp.jpg b.jpg && rm temp.jpg
--
"Maradt még 2 kB-om. Teszek bele egy TCP-IP stacket és egy bootlogót. "
- A hozzászóláshoz be kell jelentkezni
Igen, ezt a stupid módot fentebb próbáltam, csak túl sok hívás. Nem lehetne valahogy az identify- s sort összevonni az első converttel? Ja igen, identifyvel állapítom meg a méretét.
Ezen a progin szerintetek lehetne optimalizálni valamit?:
#!/bin/bash
FI=$1;
FO=$2;
TMP="/tmp/tmpfile.`perl -e 'print rand(5)'`";
xy=`identify $FI | cut -f 3 -d\ `;
x=`echo $xy | cut -f 1 -dx`;
y=`echo $xy | cut -f 2 -dx`;
echo "$xy $x $y";
if [ $x -gt $y ]; then
convert -crop $y'x'$y $FI $TMP;
convert -resize 128x128 $TMP $FO;
# echo "a";
elif [ $x -lt $y ]; then
convert -crop $x'x'$x $FI $TMP;
convert -resize 128x128 $TMP $FO;
# echo "b";
else
convert -resize 128x128 $FI $FO;
# echo "c";
fi;
Annyi biztos, hogy az összes fájl csak betűkből, számokból, és pontokból áll, így a méret megállapításánál elég a fenti megoldás.
- A hozzászóláshoz be kell jelentkezni
+
rm $TMP;
:- ).
- A hozzászóláshoz be kell jelentkezni
Ha a hívások száma a fő aggály, akkor azt esetleg lehetne csökkenteni valami scriptnyelvvel (vagy akár c++) és apis hívásokkal.
http://www.imagemagick.org/download/www/api.html
- A hozzászóláshoz be kell jelentkezni