Problem bei ImageCopy()
dhillo
- php
Da ich noch nicht soo versiert im Umgang mit der GD Library bin, hoffe ich, dass mir jemand den entscheidenden Befehl zeigen kann, um die Eigenschaften meines bildes zu verändern. Aber zuerst einmal mein Problem:
header("Content-type: image/jpeg");
$height = ($_GET['height']) ? $_GET['height'] : 450;
$width = ($_GET['width']) ? $_GET['width'] : 750;
$x = (int)$_GET['x']*30;
$y = (int)$_GET['y']*30;
$map_w = 3750;
$map_h = 1350;
$out = ImageCreate($width, $height);
$map = ImageCreateFromJPEG(ROOT."img/map.jpg");
$dst_w = (($map_w-$x) > $width) ? $width : ($map_w-$x);
$dst_h = (($map_h-$y) > $height) ? $height : ($map_h-$y);
ImageCopy($out, $map, 0, 0, $x, $y, $dst_w, $dst_h);
ImageJPEG($out);
ImageDestroy($out);
ImageDestroy($map);
Dieser Code soll einen bestimmten Ausschnitt des Bildes $map in das Bild $out einfügen. Das funktioniert ja auch aber der rest des Bildes bleibt nicht etwa weiß oder schwarz, nein, er färbt sich ebenfalls in der Hintergrundfarbe des ausgeschnittenen Bereichs, was sich wiederum bei mehreren Ausschnitten (Ich nutze eigentlich 4) sehr schlecht auf die Farbqualität auswirkt. Ein Ausschnitt scheint mit seiner Hintergrundfarbe, die eigentlich garnicht da sein dürfte, als halbdurchsichtiger Layer drüberzuliegen.
Moin!
header("Content-type: image/jpeg");
Du willst ein JPEG-Bild (mit Truecolor) ausgeben.
$out = ImageCreate($width, $height);
Erstellen tust du aber ein Bild für die Ausgabe mit 256 Farben.
$map = ImageCreateFromJPEG(ROOT."img/map.jpg");
$dst_w = (($map_w-$x) > $width) ? $width : ($map_w-$x);
$dst_h = (($map_h-$y) > $height) ? $height : ($map_h-$y);ImageCopy($out, $map, 0, 0, $x, $y, $dst_w, $dst_h);
Und setzt keinerlei Palettenfarben. Folglich entscheidet die GDlib selbst über die Farben, die erste hineinkopierte Farbe wird dann die erste Farbe der Palette, und das ist die Farbe, die das gesamte Bild als Hintergrund annimmt.
Mit der Erstellung eines Truecolor-Bildes sollte dein Problem gelöst werden.
- Sven Rautenberg