[PHP] plaatjes draaien met GD, maar dan fatsoenlijk

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • Sgreehder
  • Registratie: Juni 2004
  • Laatst online: 24-06 14:35
Kleine website voor een vereniging, moeten wat foto's op, en ik wilde even een klein feat toepassen op de mapjes waarin de verschillende foto's gesorteerd staan. Het concept via een bekend grafisch pakket ziet er zo uit:

Afbeeldingslocatie: http://tweakers.net/ext/f/NBnzrhj1irCi0B4NTqx2XQ02/full.jpg

Lekker simpel. Gebruiker klikt er op, en krijgt een mooi overzicht van foto's in dat mapje. Nu kan ik met actions wel met de hand wel wat van die afbeeldingen in elkaar zetten, maar daarvoor gebruiken we PHP. Drie willekeurige afbeeldingen kiezen, verkleinen, croppen, over elkaar leggen en draaien. Dus:

Afbeeldingslocatie: http://tweakers.net/ext/f/L6RiLMqwq9YJPDl43Yexm5xY/full.jpg

En dan:

Afbeeldingslocatie: http://tweakers.net/ext/f/BT2hleoEAxqBlMdSkKyZkOlC/full.jpg

Argh, dus. Het ziet er niet uit. Heb ik iets gemist en kun je GD in kwaliteitsmodus zetten voor een rotate? Of ben ik overgeleverd aan het gebruik van een paar templates en een lange tijd van uitmeten en uitlijnen, en verschrikkelijk lelijke gedraaide foto's, of zelfs genoegen nemen met het tweede voorbeeld, zonder een rotate?

Acties:
  • 0 Henk 'm!

  • RedHat
  • Registratie: Augustus 2000
  • Laatst online: 09-09 17:16
Je hebt tegenwoordig toch ook andere pakketten die dat veel beter kunnen?

http://www.imagemagick.org/script/index.php

Moet je wel de PHP-versies bekijken natuurlijk ;)

[ Voor 17% gewijzigd door RedHat op 30-07-2010 11:51 ]


Acties:
  • 0 Henk 'm!

  • chem
  • Registratie: Oktober 2000
  • Laatst online: 11-09 11:19

chem

Reist de wereld rond

Moderne browsers kunnen dit met css3 transforms client-side doen met hippe animaties als toevoeging. Wellicht een leuke idee? :)

Klaar voor een nieuwe uitdaging.


Acties:
  • 0 Henk 'm!

  • Sissy boy
  • Registratie: Januari 2010
  • Laatst online: 04-09 19:28
Kun je niet zoiets gebruiken?
http://code.google.com/p/jqueryrotate/

Acties:
  • 0 Henk 'm!

  • RedHat
  • Registratie: Augustus 2000
  • Laatst online: 09-09 17:16
chem schreef op vrijdag 30 juli 2010 @ 11:52:
Moderne browsers kunnen dit met css3 transforms client-side doen met hippe animaties als toevoeging. Wellicht een leuke idee? :)
Als je er niet op tegen bent om het clientside te doen is dat de (imho) betere oplossing.
Maar goed; als je veel IE7/FF2 gebruikers hebt wordt het al wat lastiger.

[ Voor 10% gewijzigd door RedHat op 30-07-2010 11:54 ]


Acties:
  • 0 Henk 'm!

  • Skef
  • Registratie: April 2001
  • Laatst online: 12-09 10:38

Skef

Ik scheer.me

Ik zou inderdaad kijken naar ImageMagick. Deze heeft zelfs de "Polaroid" functie al ingebakken zitten, dus dat scheelt je ook randjes om je foto's heen zetten. Kun je gewoon je ruwe jpg's uploaden...

"Computer games don’t affect kids: I mean if Pac-Man affected us as kids, we’d all be running around in darkened rooms, munching magic pills and listening to repetitive electronic music."


Acties:
  • 0 Henk 'm!

  • Sgreehder
  • Registratie: Juni 2004
  • Laatst online: 24-06 14:35
Skef schreef op vrijdag 30 juli 2010 @ 11:53:
Ik zou inderdaad kijken naar ImageMagick. Deze heeft zelfs de "Polaroid" functie al ingebakken zitten, dus dat scheelt je ook randjes om je foto's heen zetten. Kun je gewoon je ruwe jpg's uploaden...
Nee, die randjes zijn ook gewoon GD's imagerectangle. Nou, in elk geval bevat het doelservertje een imagick extensie, dat scheelt weer.

Acties:
  • 0 Henk 'm!

  • defcon84
  • Registratie: September 2009
  • Laatst online: 12-09 11:37

defcon84

Multipass?

mss helpt AA wel:
imageantialias($image, true);

Acties:
  • 0 Henk 'm!

  • Johnny
  • Registratie: December 2001
  • Laatst online: 12-09 12:20

Johnny

ondergewaardeerde internetguru

Ik zou het eerst op een hogre resolutie dan en dan resamplen naar thumbnailformaat. Je kan dan de meeste code die je nu hebt gewoon hergebruiken.

Aan de inhoud van de bovenstaande tekst kunnen geen rechten worden ontleend, tenzij dit expliciet in dit bericht is verwoord.


Acties:
  • 0 Henk 'm!

  • Noxious
  • Registratie: Juli 2002
  • Laatst online: 10-09 14:45
Ik heb iets soortgelijks wel eens gedaan met PHP, maar dan op 'groter formaat' met dikkere randen en daarna verkleinen met http://www.php.net/manual/en/function.imagecopyresampled.php

@Johnny HEU :( ik was aan het zoeken naar de functienaam ja, ik was eerder!

;) :+

[ Voor 19% gewijzigd door Noxious op 30-07-2010 12:11 ]


Acties:
  • 0 Henk 'm!

  • djluc
  • Registratie: Oktober 2002
  • Laatst online: 12-09 13:36
Inderdaad, met een groot origineel werken. Dan zijn de details foutjes straks door de resize meteen vrijwel niet meer zichtbaar. Kost je wel meer processing time dus daar op letten als je dit met grote aantallen doet. Clientside lijkt me een betere oplossing als je browser doelgroep dat toestaat.

Acties:
  • 0 Henk 'm!

  • kwaakvaak_v2
  • Registratie: Juni 2009
  • Laatst online: 02-06 12:29
zit zoals hierboven gemeld gewoon standaard in imagemagick 6

code:
1
2
3
4
5
  montage -size 400x400 null: ../img_photos/[a-m]*_orig.* null: \
          -auto-orient  -thumbnail 200x200 \
          -bordercolor Lavender -background black +polaroid -resize 30% \
          -gravity center -background none -extent 80x80 \
          -background SkyBlue -geometry -10+2  -tile x1  polaroid_overlap.jpg


geeft

Afbeeldingslocatie: http://www.imagemagick.org/Usage/montage/polaroid_overlap.jpg

[ Voor 10% gewijzigd door kwaakvaak_v2 op 30-07-2010 13:31 . Reden: voorbeeld plaatje ]

Driving a cadillac in a fool's parade.


Acties:
  • 0 Henk 'm!

  • Sgreehder
  • Registratie: Juni 2004
  • Laatst online: 24-06 14:35
Leuk voorbeeld. Die parameters neem ik wel even over, ook voor de thumbnails zelf zal een beetje willekeurige variatie (heel licht draaien, zonder dat het storend wordt) misschien ook erg leuk worden. Ik moet eerst even door de download en install van Xcode heen, daarna met ApplePorts een ImageMagick erop knikkeren en kijken of MAMP ook nog wil meewerken. Hihi, relaxed ontwikkelen op OS X als je even van het bekende pad af moet ;-)

Acties:
  • 0 Henk 'm!

  • Sgreehder
  • Registratie: Juni 2004
  • Laatst online: 24-06 14:35
Nou, het is gelukt. Uiteindelijk heb ik gekozen voor een oplossing door te upscalen en een custom imagerotate (de standaard GD functie is nog al eens uitgeschakeld door een geheugenlek of iets dergelijks). Dan is het resultaat zeer aardig. Ik zou denk ik nog steeds hebben gekozen voor de imagick plugin, maar het kreng wilde niet starten op m'n zandbox; iets met libfreetype. Ik ga natuurlijk geen uren zitten klungelen met configure's en make's op een OS X bak.

Afbeeldingslocatie: http://tweakers.net/ext/f/AmlxfejF2Az0neLJMRgsGgBD/full.png

Acties:
  • 0 Henk 'm!

  • Wolfboy
  • Registratie: Januari 2001
  • Niet online

Wolfboy

ubi dubium ibi libertas

Daar mag nog steeds wel wat antialiasing overheen als je het mij vraagt ;)

Of je resize werkt nog niet goed of je moet verder upscalen. Maar als ik het zo zie dan zou ik denken dat je gewoon verder moet opschalen.

Blog [Stackoverflow] [LinkedIn]


Acties:
  • 0 Henk 'm!

  • Soultaker
  • Registratie: September 2000
  • Laatst online: 03:22
@Wolfboy: toch zijn de randjes in de oorspronkelijke post van de TS ongeveer net zo lelijk, dus het lijkt er op dat 'ie het ongeveer zo wil hebben...

Overigens kun je natuurlijk ook overwegen om niet te beginnen met een rechthoek en die roteren, maar een gedraaide rechthoek (witte vulling, zwarte buitenkant) met aliasing te tekenen, en daar het geroteerde plaatje weer in tekenen. Dan zullen in ieder geval je lijntjes er netjes uitzien (hoewel je dan nog steeds imageantialias aan wil zetten).

Acties:
  • 0 Henk 'm!

  • kwaakvaak_v2
  • Registratie: Juni 2009
  • Laatst online: 02-06 12:29
[message=,noline]Sgreehder schreef op vrijdag 30 juli 2010 @ 13:41[/message]:
Leuk voorbeeld. Die parameters neem ik wel even over, ook voor de thumbnails zelf zal een beetje willekeurige variatie (heel licht draaien, zonder dat het storend wordt) misschien ook erg leuk worden. Ik moet eerst even door de download en install van Xcode heen, daarna met ApplePorts een ImageMagick erop knikkeren en kijken of MAMP ook nog wil meewerken. Hihi, relaxed ontwikkelen op OS X als je even van het bekende pad af moet ;-)
kijk eens naar het macports project, daar zit volgens mij een precompiled binary in van imagemagick

Driving a cadillac in a fool's parade.


Acties:
  • 0 Henk 'm!

  • Sgreehder
  • Registratie: Juni 2004
  • Laatst online: 24-06 14:35
Ja, MacPorts, ApplePorts, ik was even in de war. Het zijn juist die versies die problemen veroorzaakt, ik dacht eerst een mismatch tussen architecturen, maar ik blijf tegen dezelfde bug aanlopen met freetype. Maar goed, wat ik zeg, als ik uren in die terminal moet gaan wroeten, ga ik wel Linux draaien.
Pagina: 1