Webstatt.org - Community seit 2006 - 2012 (2024?)

thumbnails werden schwarz und falsche grösse

Avatar user-180
10.09.2007 10:37

mahlzeit.
ich will thumbnails generieren lassen, doch die ergebnisse sind irgentwie nicht so berauschend.

(die vorlage war kein schwarzes bild und es war auch nicht quadratisch)

laut meiner info-datei kann so spass mit bildern machen.

$thumbnail_mini_width = 20;
$uploaddir_images = "/www/htdocs/w455709b/cls/2/uploads/images/";

das originalbild wird auch richtig eingelesen.
mit echo $bildgroesse[0]." ".$bildgroesse[1]." ".$bildgroesse[2];
kann bekomme ich die reichtigen werte angezeigt.

das vollständige script gibt es hier: http://ubuntuusers.de/paste/14792/

der code sieht so aus:
//  Thumbnails generieren
// Bildgrösse und Eigenschafte feststellen
$bildgroesse = getimagesize($uploaddir_images.$row->name);
$bild_breite = $bildgroesse[0];
$bild_hoehe = $bildgroesse[1];

// wenn das Bild zu Klein ist, keine kleinen Thumbnails
// erstellen
// $thumbnail_mini_width aus der Konfigurationsdatei
if($bild_breite > $thumbnail_mini_width){
$thumbnail_mini_breite = $thumbnail_mini_width;
$thumbnail_mini_hoehe = intval($bild_hoehe*$thumbnail_mini_breite/$bild_hoehe);
}

// Wenn das Bild im GIF-Format ist
if($bildgroesse[2] == 1) {
$altes_gif = ImageCreateFromGIF($uploaddir_images.$row->name);

// nur die Bilder erstellen, die auch gebraucht werden
if(!empty($thumbnail_mini_breite)){
ImageCopyResized(ImageCreate($thumbnail_mini_breite ,$thumbnail_mini_breite), $altes_gif, 0, 0, 0, 0, $thumbnail_mini_breite, $thumbnail_mini_hoehe, $bild_breite, $bild_hoehe);
ImageGIF(ImageCreate($thumbnail_mini_breite, $thumbnail_mini_breite), $uploaddir_images."thumbnails/mini/".$row->name);
}
}

woran liegts?

may the force be with you. but mostly with me.
Avatar user-271
10.09.2007 11:26

wahrscheinlich war es kein gif
und du solltest in zeile 21 und 22 auch mal die höhe einsetzen zwinkern

#!/bin/bash
traurig){ neutral:& };:
Avatar user-180
10.09.2007 11:53

hm also eigentlich war es schon ein gif.
das mit breite und höhe habe ich geändert, aber er produziert trotzdem nur quadrate
das ganze script sieht so aus: http://ubuntuusers.de/paste/14792/ vielleicht habe ich ja was übersehen?

png und jpgs werden übrigens auch schwarz

may the force be with you. but mostly with me.
Avatar user-162
10.09.2007 15:11

Also wieso da nur Quadrate rauskommen liegt an dem hier
$thumbnail_mini_hoehe = intval($bild_hoehe*$thumbnail_mini_breite/$bild_hoehe);

Wenn $thumbnail_mini_breite die Breite ist dann wird $thumbnail_mini_hoehe gleich gross, weil * $bild_hoehe und danach / $bild_hoehe hebt sich gegenseitig aufzwinkern

Perfection is not when there’s nothing to add, but when there’s nothing to take away swisscheek.com/magazine
Avatar user-180
11.09.2007 08:10

hmm okay.. habs mal ausgebessert... leider bleiben die bilder immer noch schwarz... weiss niemand woran das liegt?

may the force be with you. but mostly with me.
Avatar user-162
11.09.2007 11:48

oke das Script sieht irgendwie total kaputt ausFettes Grinsen

ich habs mal für dich zum laufen gebracht...


$bildgroesse = getimagesize("abc.gif"zwinkern; // abc.gif ist die Quelldatei
$bild_breite = $bildgroesse[0]; // Breite des alten Bildes
$bild_hoehe = $bildgroesse[1]; // Hoehe des alten Bildes

$thumbnail_mini_width = 100; // Vorgegebene Breite des neues Bildes


if($bild_breite > $thumbnail_mini_width){
$thumbnail_mini_breite = $thumbnail_mini_width;
$thumbnail_mini_hoehe = intval($thumbnail_mini_breite/$bild_hoehe*$bild_breite); // Hoehe des neuen Bildes berechnen

}


if($bildgroesse[2] == 1) { // Wenn das alte Bild ein GIF ist (liesse sich aber auch anders prüfen zb über MIME
$altes_gif = ImageCreateFromGIF("abc.gif"zwinkern;
$neues_gif = ImageCreate($thumbnail_mini_breite ,$thumbnail_mini_hoehe);
ImageCopyResized($neues_gif, $altes_gif, 0, 0, 0, 0, $thumbnail_mini_breite, $thumbnail_mini_hoehe, $bild_breite, $bild_hoehe);
ImageGIF($neues_gif, "def.gif"zwinkern; // def.gif ist das neue Bild
}

Perfection is not when there’s nothing to add, but when there’s nothing to take away swisscheek.com/magazine
user-152
13.09.2007 17:32

ImageCopyResampled ist besser geeignet als ImageCopyResized.
Wenn man mit JPEG abeiten möchte fliegt man mit ImageCopyResized voll auf die Fresse.

> ich habs mal für dich zum laufen gebracht...

... und dabei doch glatt ImageDestroy() vergessen lächeln

Bei einfachen Sachen kann mich sich GetImageSize (dauert zu lange) auch sparen, dazu hat die GDlib schon eigene Funktionen wie imagesx bzw. imagesy.
Das Script läuft deshalb zwar auch, aber etwas schneller.

Avatar user-180
14.09.2007 15:36

wofür ist imagedestroy da?
wo finde ich genauere informationen über die bildbearbeitungsfunktionen und deren _geschickten_ einsatz im zusammenspiel (insbesondere für thumbnails)? im handbuch wird ja meist nur die funktion beschrieben.. und die thumbnailtutorials die ich so gefunden haben nutzen irgentwie alle den gleichen code...

may the force be with you. but mostly with me.
Avatar user-162
14.09.2007 15:42

oke stimmt ImageCopyResampled ist besser, darauf habe ich jetzt gar nicht geachtet... mea culpa

aber imagedestroy ist hier meiner Meinung nach nicht zwingend notwendig, da ja nur 1 Bild geladen wird und der Speicher nach Ausführung des Scripts automatisch wider frei wird.

Perfection is not when there’s nothing to add, but when there’s nothing to take away swisscheek.com/magazine
Avatar user-180
15.09.2007 09:41

okay. danke für euere hilfe.. einiges klappt soweit (die höhenbrechnung muss e ich korriegieren zwinkern)
folgendes probleme habe ich noch:
durchsichtige gifs werden mit schwarz hinterlegt wenn sie kleiner gemacht werden, kann man das durchsichtig lassen oder wenigstens mit einer anderen farbe hinterlegen?.

<?php
// Funktion: Thumbnail erstellen
// =============================

function thumbnail($bild_pfad, $bild_name, $thumbnail_pfad, $thumbnail_name, $thumbnail_breite) {

// Bildeigenschaften: Breite, Höhe, Typ, Dateigrösse
$bild_groesse = getimagesize($bild_pfad . $bild_name);

// Breite des alten Bildes
$bild_breite = $bild_groesse[0];

// Höhe des alten Bildes
$bild_hoehe = $bild_groesse[1];

// Thumbnail nur erstellen, wenn das Bild grösser als der geplante Thumbnail
if($bild_breite > $thumbnail_breite){

// Thumbnail-Höhe berechnen
$thumbnail_hoehe = intval($bild_hoehe / ($bild_breite / $thumbnail_breite));

// Wenn das Bild ein GIF ist, dann GIF-Thumbnail erstellen
if($bild_groesse[2] == 1) {
$altes_gif = ImageCreateFromGIF($bild_pfad . $bild_name);
$neues_gif = ImageCreate($thumbnail_breite, $thumbnail_hoehe);
ImageCopyResampled($neues_gif, $altes_gif, 0, 0, 0, 0, $thumbnail_breite, $thumbnail_hoehe, $bild_breite, $bild_hoehe);
ImageGIF($neues_gif, $thumbnail_pfad . $thumbnail_name);
}

// Wenn das Bild ein JPG ist, dann JPG-Thumbnail erstellen
if($bild_groesse[2] == 2) {
$altes_jpg = ImageCreateFromJPEG($bild_pfad . $bild_name);
$neues_jpg = imagecreatetruecolor($thumbnail_breite, $thumbnail_hoehe);
ImageCopyResampled($neues_jpg, $altes_jpg, 0, 0, 0, 0, $thumbnail_breite, $thumbnail_hoehe, $bild_breite, $bild_hoehe);
ImageJPEG($neues_jpg, $thumbnail_pfad . $thumbnail_name);
}

// Wenn das Bild ein PNG ist, dann PNG-Thumbnail erstellen
if($bild_groesse[2] == 3) {
$altes_png = ImageCreateFromPNG($bild_pfad . $bild_name);
$neues_png = imagecreatetruecolor($thumbnail_breite, $thumbnail_hoehe);
ImageCopyResampled($neues_png, $altes_png, 0, 0, 0, 0, $thumbnail_breite, $thumbnail_hoehe, $bild_breite, $bild_hoehe);
ImagePNG($neues_png, $thumbnail_pfad . $thumbnail_name);
}
}
}

may the force be with you. but mostly with me.
user-152
16.09.2007 10:08

Original von user-162
aber imagedestroy ist hier meiner Meinung nach nicht zwingend notwendig, da ja nur 1 Bild geladen wird und der Speicher nach Ausführung des Scripts automatisch wider frei wird.


Naja wenn meherer Zugriffe auf das Script sind, geht es nicht mehr so einfach:
http://www.cix88.de/cix_php/php_grafik/cix_gdlib_speicherverbrauch_einzeln.php

Und wenn weitere Scriptzeilen folgen, kann dies zu Problemen führen.
Wenn man ganz unsauber arbeitet, ist recht schnell das memory_limit am Ende.
Passiert das, wird das Script nicht mehr ausgeführt.

Avatar user-180
16.09.2007 10:19

ist das bei meiner funktion sinnvoll? wenn ja wo?

wie bringe ich imagealphablending und imagesavealpha in meiner funktion unter?

may the force be with you. but mostly with me.
user-152
16.09.2007 19:38

Original von user-180
wie bringe ich imagealphablending und imagesavealpha in meiner funktion unter?


Zuwas brauchst du diese Funktionen wenn du NUR Vorschaubilder erzeugen willst ?
Verstehe ich jetzt gar nicht ...

Avatar user-180
16.09.2007 20:30

naja vorschau-gifs und png sollen transparent sein, wenn die originale transparent sind

may the force be with you. but mostly with me.