EDIT: War ja klar, den Fehler findet man zwei Minuten nach dem Post :-S
tut ma leid! Hab die Zeile im Quellcode markiert! es war das imagecreate... es sollte imagecreatetruecolor heißen :-S
lg Andi
___
Hallo.
Ich hab mal angefangen mir ne kleine Image Klasse zu schreiben (soll am Anfang halt nur Bild verkleinern + Wasserzeichen raufgeben sein).
Nun bin ich schon ziemlich bald auf Probleme gestoßen.
Hier mal der Quellcode (ich hab versucht ihn mal so gut es geht durchzukommentieren; Hab noch ned viel Erfahrung in OOP, vlt. siehts etwas unordentlich aus, hab mich aber bemüht -.-):
PHP-Code:
<?php
error_reporting("E_ALL");
ini_set("display_errors",1);
class Image{
private $path; // String - Path for Output
private $type; // String - JPEG / PNG / GIF
private $is_output = false; // Boolean - Is an output path set?
public $image; // Ressource - Original Image
public $img_out; // Ressource - Image for output
private $image_width; // INT - width of Original Image
private $image_height; // INT - height of Original Image
private $quality = 100; // INT - Quality
public function __construct(){
// Maybe sometimes
}
public function loadImage($path){ // Loads an Image
if(file_exists($path)){ // Does the file exist?
$type = getimagesize($path);
$this->image_width = $type[0]; // Image width
$this->image_height = $type[1]; // Image height
if(preg_match("#jpeg#",strtolower($type['mime']))){ // JPG
$image = imagecreatefromjpeg($path);
$this->type = "JPEG";
}
if(preg_match("#png#",strtolower($type['mime']))){ // PNG
$image = imagecreatefrompng($path);
$this->type = "PNG";
}
if(preg_match("#gif#",strtolower($type['mime']))){ // GIF
$image = imagecreatefromgif($path);
$this->type = "GIF";
}
}
else{
return false;
}
$this->image = $image; // Saves the ressource
return true;
}
public function makethumb($width,$height){ // Creates a thumbnail
if($this->image_width >= $this->image_height){ //
$new_width = $width; // Calculate new Width
$new_height = intval(($this->image_height / $this->image_width ) * $new_width); // Calculate new Height
}
else{
// Hochformat;
$new_height = $height; //Calculate new height
$new_width = intval(($this->image_width / $this->image_height) * $new_height); // Calculate new Width
}
$img = imagecreatetruecolor($new_width, $new_height); // Create Picture with new dimensions
imagecopyresampled($img, $this->image, 0, 0, 0, 0, $new_width, $new_height, $this->image_width, $this->image_height); // Copy the image into the lower one
$this->img_out = $img; // save thumbnail
}
public function set_output_path($path){ // sets a path for output
$this->path = $path; // Sets the Path
$this->is_output = true; // Sets the var true
}
public function set_quality($quality=100){ // Quality for output
$this->quality = $quality;
}
public function out(){
if(!$this->is_output){ // If there's no path
return false;
}
// Mal zum Deutschen..: Derzeit noch keine Überprüfung, welcher Bildtyp ausgegeben werden soll.. zu Testzwecken nur JPG
imagejpeg($this->img_out,$this->path,$this->quality); // Save the image
imagedestroy($this->img_out); // memory
return true;
}
}
$img = new Image(); // new instance
$img->loadImage("2.jpg"); // big pic
$img->set_output_path("fff1.jpg"); // output path
$img->makethumb(300,100); // Create thumbnail
$img->set_quality(80); // set Quality
if($img->out()){ // save it
print "Erfolgreich erstellt!";
}
?>
Nun, wie ihr in den letzen Zeilen erkennen könnt
wird eine neue Instanz erstellt, das Image ("2.jpg") geladen, der Pfad zur Ausgabe ("fff1.jpg") gesetzt und ein Thumbnail generiert. Danach wird die Qualität festgelegt und das Bild wird gespeichert.
Das mit verkleinern funktioniert einwandfrei. Ebenso das Speichern.
Jedoch: Wenn man das Bild nun aufruft sieht das Ergebnis seltsam aus. Es scheint als würde das Thumbnail mit weniger Farben "erstellt".
Hat jemand eine Ahnung, woran das liegen könnte? Ich hab jetzt schon ein paar Seiten durchsucht, gefunden hab aber nicht wirklich was zu meinem Problem gefunden.
Hier der Link zur Verdeutlichung:
-entfernt-
Wäre toll, wenn da jem. drüber schaun könnte. Ich tappe bei der Lösung irgendwie im Dunkeln. Vlt. übersehe ich ja nur eine Kleinigkeit..?
lg
Andi