Bildbearbeitung schlägt fehl

timestamp

Mitglied Käsekuchen
Hallo allerseits, ich steh hier grad vollkommen auf dem Schlauch.

Ich kopiere ein großes Bild mittels imagecopyresize in ein kleineres, leeres. Zu Testzwecken wollte ich das neue Bild dann einfach mal komplett mit Farbe füllen. Das Bild bleibt unverändert:

PHP:
private function resize($img){
    $size = getimagesize($img);

    $this->width  = ceil($size[0] / 5);
    $this->height = ceil($size[1] / 5);

    $source      = imagecreatefromjpeg($img);
    $destination = imagecreatetruecolor( $this->width, $this->height);

    imagecopyresized( $destination, $source, 0,  0,  0, 0, $this->width, $this->height, $size[0], $size[1]);
    imagefill($destination, 0,0,255);
    return $destination;
  }
 
[phpf]imagefill[/phpf] erwartet als vierten Charakter eine von [phpf]imagecolorallocate[/phpf] erstellten Wert.
Probier es also damit mal aus.
 
Hab ich auch schon.
Imagecolorallocate gibt einen Integerwert zurück, der sich wie folgt zusammen setzt:

PHP:
$i = $blue + $green * 256 + $red * 65536;

255 entspricht demnach #0000ff, also einem kompletten blauen Bild ;)
 
Also wenn ich die Funktion umstelle und und eine Grafik durchjage und direkt ausgebe, bekomme ich das gewünschte Ergebnis... Eine blau gefärbte Grafik.
Das Problem scheint also irgendwo in deiner Verarbeitung zu liegen?

PHP:
<?php

function resize($img){
    $size = getimagesize($img);

    $width  = ceil($size[0] / 5);
    $height = ceil($size[1] / 5);

    $source      = imagecreatefrompng($img);
    $destination = imagecreatetruecolor( $width, $height);

    imagecopyresized( $destination, $source, 0,  0,  0, 0, $width, $height, $size[0], $size[1]);
    imagefill($destination, 0,0,255);
    return $destination;
  }  
  
$im = resize('punch.png');
header('Content-type: image/png');
imagepng($im);
imagedestroy($im);
?>
 
Hi

das ist jetzt allerdings merkwürdig. Ich habe mal ein komplett rotes Bild in paint erstellt. Das wird Problemlos zu einer kleineren blauen Grafik. Nur die Bilder die ich wirklich so bearbeiten muss lassen sich nicht färben (nur verkleinern). Ich habe es sowohl local als auch auf einem Webserver probiert (volle Zugriffsberechtigung (777) ) und das Bild( besser Foto) lässt sich nicht blau färben.
 
Hm, warum es passiert, weiß ich nicht, aber wenn ich ein Foto nehme (generisches Suchmaschinenbild, < 1000x1000), dann wird nur oben an der linken Ecke ein wenig ausgefüllt, mehr nicht...
Mein Lösungsvorschlag:
[phpf]imagefilledrectangle[/phpf]

Ist laut den Kommentaren auch performanter bzw. weniger rechenintensiv für die arme GD Library.
 
Hallo,

die Dokumentation zu imagefill ist ein bisschen knapp/missverständlich. Es heißt auf php.net zu imagefill ja "flood fill" und "beginnend bei der Koordinate x, y".

Die Beschreibung auf selfphp.de macht deutlich, wie imagefill wirklich funktioniert.

Es geht also bei Photos (wo fast jeder Pixel einen anderen Farbwert hat) nicht einfach, das ganze Photo zu füllen. Bei einfachen in Paint erstellten roten Bildern klappt es natürlich schon.

Gute Nacht...
 
Zurück