Toon posts:

cmd-line batch cropping and resizing

Pagina: 1
Acties:

Verwijderd

Topicstarter
Ik moet een heel aantal plaatjes van afmetingen veranderen.

ze zijn nu ongeveer 700x1000 en ze moeten worden 61x98
om tijdsverlies te beperken wil ik dat alsvolgt automatiseren:

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#!/bin/bash
#
# dit script maakt de afbeeldingen die nodig zijn voor
# afstudeeronderzoek op de juiste afmetingen. (61x98)
#
# eerst worden alle plaatjes 980 hoog gemaakt
mogrify -geometry x980\> *

# vervolgens worden de afbeeldingen die smaller dan 610 zijn opgeblazen tot  610 bij y
# dit is waarschijnlijk niet nodig: alle afbeeldingen zijn minstens 610 breed
mogrify -geometry 610x2000\< *

# nu worden de 'uitstekende' randen van de afbeelding eraf gesneden
# mogrify -crop 610x980 *
# -crop werkt niet, daar dat een

# de afbeeldingen worden verkleind (tot 10%) naar de gewenste afmetingen
mogrify -geometry 10% *


het probleem zit 'm in "mogrify -crop 610x980 *"

opzich werkt die regel wel, maar het levert mij niet het gewenste resultaat op.
ik wil namelijk een stuk van 610x980 uit het MIDDEN van de afbeelding, en die optie ben ik in de online-documentatie van mogrify niet tegengekomen (nb: mogrify maakt deel uit van de Image Magick tools)

Wie weet er een nette, tijdsbesparende oplossing voor dit probleem?
thnx in advance!

PS: wat altijd nog kan is een slordige manier:
ik weet hoe breed de afbeeldingen zijn: varierend tussen 650 en 690.
Dan knip ik ze eerst naar 645 (ofzo) door eer links wat vanaf te halen.
Daarna maak ik ze 610 door er rechts wat vanaf te halen. Per saldo gaat dan links en rechts ongeveer evenveel beeld 'verloren', en niet aan een kant een heel eind.

  • Bananenplant
  • Registratie: Januari 2001
  • Laatst online: 08:23
misschien kun je de manpages van convert eens lezen, misschien kan die het :)

❤️‍🩹 Bezuinigen op armen en zieken 🤕 ? Welnee, Zucmantaks, nu 💰 !


Verwijderd

Topicstarter
ucchan schreef op 07 juni 2004 @ 20:54:
misschien kun je de manpages van convert eens lezen, misschien kan die het :)
Convert kan het - volgens mij - ook niet.
Het is helaas hetzelfde packet (ook imagemagick) en bevat het praktisch dezelfde mogelijkheden als mogrify (met dat verschil dat het om verschillende bestandstypen gaat, ik heb zowel als input als als output bmp)

  • Bananenplant
  • Registratie: Januari 2001
  • Laatst online: 08:23
misschien klinkt dit heel smerig hoor, maar zou je niet gewoon de bmp-header eraf kunnen halen en de pixelwaarden in een array dumpen en dan je plaatje gaan bewerken? zoiets heb ik laatst gedaan in fortran, ruis uit een foto filteren. maar dat voert te ver hier denk ik :/

❤️‍🩹 Bezuinigen op armen en zieken 🤕 ? Welnee, Zucmantaks, nu 💰 !


Verwijderd

Topicstarter
ucchan schreef op 07 juni 2004 @ 21:19:
misschien klinkt dit heel smerig hoor, maar zou je niet gewoon de bmp-header eraf kunnen halen en de pixelwaarden in een array dumpen en dan je plaatje gaan bewerken? zoiets heb ik laatst gedaan in fortran, ruis uit een foto filteren. maar dat voert te ver hier denk ik :/
voor zover ik je idee snap klinkt het goed ;) maar zo technisch ben ik nu ook weer niet :(

ik programmeer niet of nauwelijks, laat staan in fortran en het mag niet te veel tijd kosten. en dat zou het wel doen - gezien mijn gebrek aan programmeerervaring :|

anyone een --center optie in imagemagick gehackt? ;)

  • irondog
  • Registratie: Januari 2001
  • Laatst online: 11-05-2025

irondog

alle dingen moeten onzin zijn

Verwijderd schreef op 07 juni 2004 @ 21:24:
[...]
ik programmeer niet of nauwelijks, laat staan in fortran en het mag niet te veel tijd kosten. en dat zou het wel doen - gezien mijn gebrek aan programmeerervaring :|

anyone een --center optie in imagemagick gehackt? ;)
Je hoeft zelden tot nooit te programmeren om iets gedaan te krijgen ;)

ImageMagick is echt bijna allesomvattend, dus wat jij wil kan gewoon:
code:
1
2
%man convert
%convert -crop 200x200+100+100 origineel.png proof_of_concept.png

Maak een screenshot van je desktop en noem hem origineel.png, executeer daarna het bovenstaande regeltje. Verder zoek je het zelf maar uit.

[P5B deluxe] [Core2Duo 6300] [2 X 1GB DDR2] [GF FX7300] [320 GB WD] [Gentoo] [VISTA]


Verwijderd

Topicstarter
irondog schreef op 07 juni 2004 @ 22:24:
[...]

Je hoeft zelden tot nooit te programmeren om iets gedaan te krijgen ;)

ImageMagick is echt bijna allesomvattend, dus wat jij wil kan gewoon:
code:
1
2
%man convert
%convert -crop 200x200+100+100 origineel.png proof_of_concept.png

Maak een screenshot van je desktop en noem hem origineel.png, executeer daarna het bovenstaande regeltje. Verder zoek je het zelf maar uit.
Dat had ik ook al uitgezocht, maar helaas gaat dat niet werken omdat ik de precieze afmetingen van de orignele plaatjes niet exact weet. (variatie van ongeveer 80 pixels)
Zoals ik in mijn eeste post al - zij het zeer subtiel - had aangegeven is de breedte van de plaatjes variabel. Ik kan dus wel zeggen dat convert/mogrify/whatever 20 pixels uit de rand moet knippen, en dan zit 'ie bij een aantal afbeeldingen goed, maar voor andere had 'ie op 30 moeten zitten, of 33 of ... enz

AFAIK is helaas niet mogelijk om relatieve coordinaten op te geven (breedte -610)/2 pixels zeg maar.

PS: je zult je afvragen waarom dat zo precies moet: da's 'wetenschap' en daar hebben ze de neiging om over details te zeuren (en terecht! ;) )

  • smokalot
  • Registratie: Juni 2001
  • Laatst online: 15-01 22:00

smokalot

titel onder

maar je kunt dan toch een bash-scriptje maken dat ze eerst allemaal dezelfde breedte maakt, en daarna alsnog convert?

Of snap ik niet hoe die plaatjes eruitzien :P

offtopic:
welke wetenschap?

[ Voor 4% gewijzigd door smokalot op 07-06-2004 22:46 ]

It sounds like it could be either bad hardware or software


  • irondog
  • Registratie: Januari 2001
  • Laatst online: 11-05-2025

irondog

alle dingen moeten onzin zijn

Verwijderd schreef op 07 juni 2004 @ 22:43:

AFAIK is helaas niet mogelijk om relatieve coordinaten op te geven (breedte -610)/2 pixels zeg maar.
Nou, aan je eerste post te zien kun je bash scripten. Je zou vóór het resizen de grootte van de image op kunnen vragen en in een variable kunnen stoppen, lijkt me.

code:
1
%man identify

edit:
Toch nog maar ff gezocht, zou jij ook moeten kunnen.
PS: je zult je afvragen waarom dat zo precies moet: da's 'wetenschap' en daar hebben ze de neiging om over details te zeuren (en terecht! ;) )
JA en in het algemeen moet je óf zelf programmeren óf betalen om iets aan de praat te krijgen.

[ Voor 13% gewijzigd door irondog op 07-06-2004 23:06 ]

[P5B deluxe] [Core2Duo 6300] [2 X 1GB DDR2] [GF FX7300] [320 GB WD] [Gentoo] [VISTA]


Verwijderd

Topicstarter
smokalot schreef op 07 juni 2004 @ 22:46:
maar je kunt dan toch een bash-scriptje maken dat ze eerst allemaal dezelfde breedte maakt, en daarna alsnog convert?

Of snap ik niet hoe die plaatjes eruitzien :P

offtopic:
welke wetenschap?
allemaal dezelfde breedte maken gaat opzich wel, maar niet als 'resize' omdat ze dan niet de goede hoogte hebben :| Dan zou ik daarna de hoogte aan moeten passen, en dat levert natuurlijk hetzelfde probleem op. ;)

Welke wetenschap? neurospychologie. Maar don't ask de details, IK studeer dat niet ;) m'n vriendin heeft die plaatjes nodig om een onderzoek naar interferentie tussen de linker en de rechter hemisfeer te kunnen reproduceren (maar dan strikter als eerder gedaan, zodat haar conclusies betrouwbaarder zijn) Daarvoor moeten de plaatjes precies 2.5 bij 4 graden 'groot' op een beeldscherm verschijnen. Bij een kijkafstand van 70 cm (iirc) komt dat neer op 61 bij 98 pixels.

Ik zal eens gaan kijken of ik het idee van irondog kan uitvoeren. morgen even kijken hoe ik de breedte uit een plaatje kan trekken.

edit: ik zie dat irondog dat ook al voor me opgezocht heeft _/-\o_ thnx. Ik zou er bijna lui van worden >:)

[ Voor 7% gewijzigd door Verwijderd op 07-06-2004 23:10 ]


  • Emmeau
  • Registratie: Mei 2003
  • Niet online

Emmeau

All your UNIX are belong to us

paintshop pro heeft een batch option, waarmee je een X aantal plaatjes in een keer kan converteren.

1 keer handmatig een plaatje verkleinen (terwijl de script recorder meeloopt), script saven.

batch conversies -> run this script -> selecteer je files -> destination aangeven -> go -> koffie drinken


oops, non-windows, ach, mischien kan je het ergens anders converteren

[ Voor 15% gewijzigd door Emmeau op 07-06-2004 23:15 ]

If you choose to criticise you choose your enemies


Verwijderd

Topicstarter
well, thnx voor de ideeen, tips etc. het is gelukt.

onderstaand resultaat doet het werk.(altijd handig als iemand anders een batch image resize opdracht met imagemagick wil uitvoeren (zow, even een paar termen voor de search ;) of voor het geval dat ik m'n scriptje kwijt raak :+)

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
#!/bin/bash
#
# dit script maakt de afbeeldingen die nodig zijn voor
# afstudeeronderzoek op de juiste afmetingen. (61x98)
#
# eerst worden alle plaatjes 980 hoog gemaakt vervolgens worden de 
# afbeeldingen die smaller dan 610 zijn opgeblazen tot 610 bij y
# uiteindelijk worden de 'uitstekende' randen van de afbeelding afgesneden

for FILE in *bmp
do

   # eerst wordt het plaatje 980 hoog gemaakt
   mogrify -geometry x980 ${FILE}

   # vervolgens worden de afbeeldingen die  te smal zijn breder gemaakt
   # dit is in principe niet nodig omdat alle plaatjes in een >610:980 verhouding zijn
   mogrify -geometry 610x\< ${FILE}

   # de X en Y waarden (breedte en hoogte) worden uit het bestand geplukt
   X="`identify -format "%w" ${FILE}`"
   Y="`identify -format "%h" ${FILE}`"

   # om daarmee vervolgens het midden van het plaatje te kunnen selecteren
   mogrify -shave $[(X - 610) / 2]x$[(Y - 980) / 2] ${FILE}

   # uiteindelijk moet het plaatje nog met een factor 10 verkleind worden
   mogrify -geometry 10% ${FILE}

# het plaatje is nu 'verwerkt'
done


edit: overigens, het kan korter:
code:
1
2
3
4
5
6
7
8
#!/bin/bash
for FILE in *bmp
do
mogrify -geometry x980 ${FILE}
mogrify -geometry 610x\< ${FILE}
mogrify -shave $[(`identify -format "%w" ${FILE}` - 610) / 2]x$[(`identify -format "%h" ${FILE}` - 980) / 2] ${FILE}
mogrify -geometry 10% ${FILE}
done


ik denk niet dat je de vier mogrify commando's kunt comprimeren (tenzij je niet eerst naar 610x980 wilt natuurlijk en het ook zonder check op de breedte kunt)

[ Voor 39% gewijzigd door Verwijderd op 08-06-2004 01:48 ]

Pagina: 1