Supportnet Computer
Planet of Tech

Supportnet / Forum / Skripte(PHP,ASP,Perl...)

Bild-qualität nimmt ab





Frage

Hallo, ich versehe beim Upload eines Bildes jedes Bild mit einem Wasserzeichen. Jedoch ist mir aufgefallen dass die Qualität sehr stark abnimmt. Die Farben bleiben nicht wie vorher und die Qualität nimmt stark ab. Hier das script: $name="$userfile_name"; if (!empty($name)){ # Der Copyright Text $text = "(c) copyright-Text"; # Pfad zu den Bildern $path = "../$usr/gal/bigg/"; $type = substr($name,-3); if ($type == "jpg"){ $im = ImageCreateFromJPEG ($path.$name); # Bildhandle öffnen $schriftfarbe = ImageColorAllocate($im, 239, 200, 200); $px = (imagesx($im)-7*strlen($text))/2; $py = (imagesy($im)-45); ImageString($im,3,$px,$py,$text,$schriftfarbe); ImageJpeg($im,"../$usr/gal/bigg/$userfile_name"); ImageDestroy($im); } elseif ($type == "png"){ $im = ImageCreateFromPNG ($path.$name); # Bildhandle öffnen $schriftfarbe = ImageColorAllocate($im, 239, 200, 200); $px = (imagesx($im)-7*strlen($text))/2; $py = (imagesy($im)-45); ImageString($im,3,$px,$py,$text,$schriftfarbe); ImagePng($im,"../$usr/gal/bigg/$userfile_name"); ImageDestroy($im); } } Vielleicht kann mir ja einer sagen warum aus einem 50kb Bild ein 8kb Bild wird. Vielleicht kann mir jemand sogar verbesserungsvorschläge geben. danke

Antwort 1 von ThomasOOP_ohne

ist das nur bei jpgs?
eventuell musst du die kompression vorher einstellen
kann sein das sie standardmäßig auf 75% steht

den befehl habe ich nicht im kopf
einfach die grafikfunktionen im off. php handbuch auf php.net angucken

muss nicht stimmen, einfach nur eine möglichkeit

Antwort 2 von Hugo-t

So ich glaube ich habe da einen Fehler gemacht.
Das Problem ist nicht das WasserzeichenScript.

Das Problem ist die Erzeugung der Thumbnails.


Das Script:
$Grafikdatei = "../$usr/gal/$userfile_name";

$Bilddaten = getimagesize($userfile);

$OriginalBreite = $Bilddaten[0];
$OriginalHoehe = $Bilddaten[1];
$ThumbnailBreite = 128;
if($OriginalBreite < $ThumbnailBreite)
{
$ThumbnailBreite=$OriginalBreite;
}
$Skalierungsfaktor = $OriginalBreite/$ThumbnailBreite;
$ThumbnailHoehe = intval($OriginalHoehe/$Skalierungsfaktor);

if($Bilddaten[2]==1)
{
$Originalgrafik = ImageCreateFromGIF($Grafikdatei);
$Thumbnailgrafik = ImageCreate($ThumbnailBreite, $ThumbnailHoehe);
ImageCopyResized($Thumbnailgrafik, $Originalgrafik, 0, 0, 0, 0, $ThumbnailBreite, $ThumbnailHoehe, $OriginalBreite, $OriginalHoehe);
ImageGIF($Thumbnailgrafik, $Grafikdatei);
}
elseif($Bilddaten[2]==2)
{
$Originalgrafik = ImageCreateFromJPEG($Grafikdatei);
$Thumbnailgrafik = ImageCreate($ThumbnailBreite, $ThumbnailHoehe);
ImageCopyResized($Thumbnailgrafik, $Originalgrafik, 0, 0, 0, 0, $ThumbnailBreite, $ThumbnailHoehe, $OriginalBreite, $OriginalHoehe);
ImageJPEG($Thumbnailgrafik, $Grafikdatei);
}
elseif($Bilddaten[2]==3)
{
$Originalgrafik = ImageCreateFromPNG($Grafikdatei);
$Thumbnailgrafik = ImageCreate($ThumbnailBreite, $ThumbnailHoehe);
ImageCopyResized($Thumbnailgrafik, $Originalgrafik, 0, 0, 0, 0, $ThumbnailBreite, $ThumbnailHoehe, $OriginalBreite, $OriginalHoehe);
ImagePNG($Thumbnailgrafik, $Grafikdatei);
}


Bis jetzt habe ich es nur bei jpeg´s getestet. Mir ist klar das durch das erstellen ein größen und auch qualitäts verlußt stattfindet. Aber so stark habe ich mir den nicht vorgestellt. Manche bilder verlieren fast vollkommen ihre normale Farbe und werden schwarz/weiß.

Vielleicht habe ich da nen fehler drin.

Danke für die Hilfe!

Antwort 3 von Supermax

Ich würde für die erzeugung der Thumbs imagecreatetruecolor(w,h) verwenden, eventuell auch imagecopyresampled() statt imagecopyresized(), vorausgesetzt du hast eine entsprechend aktuelle Version von PHP (4.3.x oder besser) und der Grafikbibliothek "gdlib" zur Verfügung (die mit PHP 4.3.x mitgelieferte Version sollte das beherrschen).

imagecreate() erzeugt nämlich standardmäßig nur ein 8-bit Bild mit einer Palette aus 256 Farben. imagecreatetruecolor() erzeugt ein 24 bit-Bild mit 8 bits pro R,G,B Anteil

imagecopyresampled() hat gegenüber imagecopyresized() den Vorteil, daß die einzelnen Pixel beim Skalieren interpoliert werden, dadurch sehen die Thumbnails besser aus (fast so gut wie wenn man sie manuell in Photoshop oder IrfanView erstellt), und da weniger "harte" Übergänge sind, wird das resultierende JPEG-File auch kleiner.

Ich möchte kostenlos eine Frage an die Mitglieder stellen:


Ähnliche Themen:


Suche in allen vorhandenen Beiträgen: