Hoe met GD-lib grayscale jpegs te maken onder PHP?

Pagina: 1
Acties:
  • 102 views sinds 30-01-2008
  • Reageer

  • Toni
  • Registratie: Februari 2001
  • Niet online
Ik ben bezig met een project waarbij het mogelijk moet zijn truecolor JPG plaatjes te uploaden en die vervolgens door de server te laten converteren naar een grayscale JPG. Ik heb de GD-lib geinstalleerd en dacht dat het met ImageCopyMergeGray wel zou lukken. Niets is minder waar. Het plaatje wordt alleen maar met zwart gemengd. En dat schiet niet echt op.

Kan iemand mij helpen?

We need more cowbell


  • Tsjipmanz
  • Registratie: Oktober 2000
  • Laatst online: 13-05 14:52

Tsjipmanz

Der Rudi ist da

Volgens

http://www.php-center.de/en-html-manual/function.imagecopymergegray.html wrkt de functie als
volgt:
Description

int ImageCopyMergeGray (resource dst_im, resource src_im, int dst_x, int dst_y, int src_x, int src_y, int src_w, int src_h, int pct)


ImageCopyMergeGray() copy a part of src_im onto dst_im starting at the x,y coordinates src_x, src_y with a width of src_w and a height of src_h. The portion defined will be copied onto the x,y coordinates, dst_x and dst_y. The two images will be merged according to pct which can range from 0 to 100. When pct = 0, no action is taken, when 100 this function behaves identically to ImageCopy().

This function is identical to ImageCopyMerge() except that when merging it preservese the hue of the source by converting the destination pixels to gray scale before the copy operation.
Voordat er gekopieerd wordt naar de dst_im worden de pixels dus al geconverteerd naar grayscale. Als je er nu voor zorgt dat pct=0, dan wordt dus 0% van de src_im op de dst_im "geplakt", maar aangezien voor de operatie de zaak ge-grayscaled is zou in de dst_im dus de grijswaarde van het plaatje moeten staan.

Ik weet niet hoe je m nu aanroept maar gezien de definitie van de functie zou ik dus voor src_im en dst_im hetzelfde plaatje nemen en pct op 0 zetten.
Dan zou als ik t goed begrijp het grijswaardenplaatje na de kopieeractie in dst_im moeten staan.

Succes.

There's no such thing as a mistake, just happy accidents - Bob Ross
Relaxte muziek: altijd okee!
- Soulseek rulez -


  • TlighT
  • Registratie: Mei 2000
  • Laatst online: 22-03 10:40
En als niks werkt kun je nog altijd het plaatje pixel voor pixel doorlopen, waarbij voor elke pixel grijswaarde = 0.3 * rood + 0.59 * groen + 0.11 * blauw.

  • Toni
  • Registratie: Februari 2001
  • Niet online
Bedankt voor de reacties, maar helaas werkt het nog steeds niet. Ik heb met de functie imagecopymergegray geprobeerd de afbeelding grayscale te krijgen (en idd met pct 0 het andere plaatje mergen) maar dan loopt de functie vast. Toen ben ik begonnen met een pixel-voor-pixel routine, dus van iedere pixel de grijswaarde berekenen. Maar het lukt me niet eens de kleurwaarde terug te krijgen met imagecolorat(); De browser geeft dan wederom geen sjoege.

Iemand enig idee wat ik zou kunnen doen?

We need more cowbell


  • Lurge
  • Registratie: Maart 2000
  • Niet online

Lurge

ActueleWind

Op dinsdag 25 september 2001 16:55 schreef TlighT het volgende:
En als niks werkt kun je nog altijd het plaatje pixel voor pixel doorlopen, waarbij voor elke pixel grijswaarde = 0.3 * rood + 0.59 * groen + 0.11 * blauw.
dan is je pc echt een eeuwigheid bezig als je een beetje groot plaatje hebt. Ik merk dat ook al als ik een foto ga draaien. Dat doe ik ook pixel voor pixel (volgens mij is er geen andere oplossing voor) en dan is ie met fotos van 800 * 600 en groter toch een flink tijdje bezig.

Maar het is een wel optie als je het niet te vaak hoeft te doen. Dan moet je het gewoon gelijk opslaan in een file.

ActueleWind