CronJob-Service
bei SELFPHP mit ...
|
+ minütlichen Aufrufen
+ eigenem Crontab Eintrag
+ unbegrenzten CronJobs
+ Statistiken
+ Beispielaufrufen
+ Control-Bereich
Führen Sie mit den CronJobs von
SELFPHP zeitgesteuert Programme
auf Ihrem Server
aus. Weitere Infos
|
:: Anbieterverzeichnis ::
Globale Branchen
Informieren Sie sich über ausgewählte Unternehmen im Anbieterverzeichnis von SELFPHP
:: Newsletter ::
Abonnieren Sie hier den kostenlosen
SELFPHP Newsletter!
|
PHP Grundlagen Hier kann über grundlegende Probleme oder Anfängerschwierigkeiten diskutiert werden |
26.10.2006, 17:20:54
|
Anfänger
|
|
Registriert seit: Oct 2006
Beiträge: 9
|
|
Thumbnails erstellen
Hallo!
Ich hab mich mal auf ein ganz neues Gebiet in PHP für mich gewagt: Imagefunktionen.
Ich wollt eigentlich nur 'n kleines Skript schreiben, was Vorschaubilder erzeugt.
Aber von der Unmenge an Imagefunktionen wird man ja erschlagen! :rolleyes
Nun ja, auf jeden Fall hab ich jetzt nach sau langer Arbeit 14 Zeilen Code zustande gebracht. :D
Aber - wie sollte es auch sonst sein? - funktioniert das Skript nicht!
Das Vorschaubild wird zwar erstellt, aber es ist immer einfach nur ein schwarzes Bild.
Ihr könnt mir ja bestimmt weiter helfen, oder? :)
PHP-Code:
<?php
$image = 'images/caro.jpg';
$image_name = 'caro';
$image_info = GetImageSize($image);
$image_width = $image[0];
$image_height = $image[1];
$image = ImageCreateFromJPEG($image);
$thumbnail = ImageCreateTrueColor(120, 90);
ImageCopy($thumbnail, $image, 0, 0, 0, 0, $image_width, $image_height);
ImageJPEG($thumbnail, 'images/thm_' . $image_name . '.jpg');
?>
|
26.10.2006, 18:09:36
|
Member
|
|
Registriert seit: Jun 2006
Ort: Bayern
Alter: 56
Beiträge: 930
|
|
AW: Thumbnails erstellen
Hab zwar imagecopy() noch nie benutzt, aber um ein Thumbnail erstellen zu können solltest du imagecopyresized() verwenden. Mit dieser Funktion ist es möglich ein Bild in seiner Größe zu verändern. Bei imagecopy() würde nur ein Teil in das Thumbnail kopiert. Da diese Funktion ja nicht die Größe des Ausgangsbildes verändert. Warum es schwarz ist? Denke mal, dass der zu kopierende Teil des Ausgangsbildes nicht größer sein darf wie das erstellte Bild.
Fällt mir gerade noch ein. Gib deinem Thumbnail über die Funktion imagecolorallocate() erst noch eine Hintergrundfarbe. Ansonsten kann es vorkommen, dass das erstellte Thumbnail einen schwarzen Streifen am Rand haben kann.
__________________
Grüße Andes
Geändert von Andes (26.10.2006 um 18:13:40 Uhr)
|
26.10.2006, 18:37:49
|
Anfänger
|
|
Registriert seit: Oct 2006
Beiträge: 9
|
|
AW: Thumbnails erstellen
Wenn du sagst, du hast die Funktion imagecopy() noch nie benutzt...
Wie erstellst du denn Thumbnails?
Weil ich denke das mein Skript eh bisschen dumm ist, weil ich damit ja nur JPEG-Dateien bearbeiten kann. :)
PHP-Code:
$image = ImageCreateFromJPEG($image); $thumbnail = ImageCreateTrueColor(120, 90); ImageCopyResized($thumbnail, $image, 0, 0, 0, 0, 120, 90, $image_width, $image_height); ImageJPEG($thumbnail, 'images/thm_' . $image_name . '.jpg');
Warning: imagecopyresized() [function.imagecopyresized]: Invalid image dimensions
Stimmt doch alles!?
Geändert von Caroline (26.10.2006 um 18:39:05 Uhr)
|
26.10.2006, 18:51:40
|
Senior Member
|
|
Registriert seit: Oct 2004
Ort: Werdenberg / Schweiz
Alter: 35
Beiträge: 1.476
|
|
AW: Thumbnails erstellen
also ich hab das mal so gemacht:
$this -> pictureinfo ist das ergebnis von http://ch2.php.net/manual/de/function.getimagesize.php
PHP-Code:
if (function_exists("ImageCreateTrueColor") && $this -> pictureInfo[2]!=1)
{
$neuesBild = @imagecreatetruecolor($this -> neueBreite, $this -> neueHoehe);
}
else
{
$neuesBild = imageCreate($this -> neueBreite,$this -> neueHoehe);
}
if($this -> pictureInfo[2]==1)
{
// GIF
$altesBild = ImageCreateFromGIF("grossesBild.gif");
imagecopyresampled($neuesBild,$altesBild,0,0,0,0,$this ->neueBreite,$this -> neueHoehe, $this -> pictureInfo[0], $this -> pictureInfo[1]);
imageGIF("bild.gif");
}
if($this -> pictureInfo[2]==2)
{
// JPG
$altesBild = ImageCreateFromJPEG("grossesBild.jpg");
imagecopyresampled($neuesBild,$altesBild,0,0,0,0,$this ->neueBreite,$this -> neueHoehe, $this -> pictureInfo[0], $this -> pictureInfo[1]);
ImageJPEG("bild.jpg");
}
if($this -> pictureInfo[2]==3)
{
// PNG
$altesBild = ImageCreateFromPNG("grossesBild.png");
imagecopyresampled($neuesBild,$altesBild,0,0,0,0,$this ->neueBreite,$this -> neueHoehe, $this -> pictureInfo[0], $this -> pictureInfo[1]);
ImagePNG("bild.png");
}
if($this -> pictureInfo[2] != 1 && $this -> pictureInfo[2] != 2 && $this -> pictureInfo[2] != 3)
{
throw new Exception("Dieses Bild-Format wird nicht unterstützt!");
}
hoffe konnte dir mit diesem Code-Ausschnitt helfen :)
__________________
Opendix lehnt jegliche Haftung für evtl. vorhandene Fehler in der Grammatik sowie der Satzstellung ab! Bitte wenden Sie sich an die Tastatur!
Betatester gesucht:
Skiclub Gams / CEVI Grabs
Geändert von Opendix (26.10.2006 um 18:52:14 Uhr)
|
26.10.2006, 19:07:29
|
Member
|
|
Registriert seit: Jun 2006
Ort: Bayern
Alter: 56
Beiträge: 930
|
|
AW: Thumbnails erstellen
Zitat:
Zitat von Caroline
Wenn du sagst, du hast die Funktion imagecopy() noch nie benutzt...
Wie erstellst du denn Thumbnails?
|
So wie ich es ob beschrieben habe. Ich verwende dafür imagecopyresized(), wegen der oben genannten Gründe.
Wie groß ist dein Ausgangsbild? Ab einer Größe von 1000 Pixel x 1000 Pixel, kann es zu Problemen kommen. Die Teilweise nicht mal eine Fehlermeldung erzeugen.
__________________
Grüße Andes
Geändert von Andes (26.10.2006 um 19:08:13 Uhr)
|
26.10.2006, 19:13:21
|
Anfänger
|
|
Registriert seit: Oct 2006
Beiträge: 9
|
|
AW: Thumbnails erstellen
Ach so, du benutzt die ImageCopyResized()...
Also die Ausgangsgröße ist 600 x 450.
Und wenn ichs so mach wie du gesagt hast (und wie ich oben gepostet hab), dann kommt ahlt die fehlermeldung Warning: imagecopyresized() [function.imagecopyresized]: Invalid image dimensions
EDIT:
Und wo liegt der Unterschied zwischen den Funktionen ImageCopyResampled() und ImageCopyResized()?
Beide kopieren und ändern die Größe von einem Teils eines Bildes.
Bei ImageCopyResampled() steht nur auch noch "with resampling" dabei...
Was ist resampling? Welche der beiden Funktionen ist zu empfehlen?
Geändert von Caroline (26.10.2006 um 20:32:22 Uhr)
|
26.10.2006, 19:34:40
|
|
Junior Member
|
|
Registriert seit: Oct 2006
Ort: Crailsheim / SHA / Stuttgart
Alter: 32
Beiträge: 388
|
|
AW: Thumbnails erstellen
So hab dir hier mal meine das gute ist es geht keine qualität verloren du musst halt bedenken imm 4:3 Seitenverhältnis einhalten
PHP-Code:
<? /* Thumbnails, (C) Cboard-Online.de, 2006 ( PHP-GD 2, Freeware ) */
header("Content-Type: image/jpeg"); $explode = explode('x', $_GET['size']);
$image = imagecreatefromjpeg(''.$_GET['img'].'');
$width = imagesx($image); $height = imagesy($image);
$picture = imagecreatetruecolor($explode['0'],$explode['1']);
imagecopyresampled($picture, $image, 0,0, 0,0, $explode['0'],$explode['1'], $width,$height);
imagejpeg($picture,"",100);
?>
Falls du intresse an einem hasst bei dem alle Formate gehen kannst dich ja mal bei mir melden unter ICQ 260 442 137
MfG Swoosh
Geändert von Swoosh (26.10.2006 um 19:35:59 Uhr)
|
26.10.2006, 21:40:43
|
|
SELFPHP Guru
|
|
Registriert seit: May 2003
Beiträge: 7.187
|
|
AW: Thumbnails erstellen
Zitat:
Zitat von Caroline
Und wo liegt der Unterschied zwischen den Funktionen ImageCopyResampled() und ImageCopyResized()?
Beide kopieren und ändern die Größe von einem Teils eines Bildes.
Bei ImageCopyResampled() steht nur auch noch "with resampling" dabei...
Was ist resampling? Welche der beiden Funktionen ist zu empfehlen?[/b]
|
imagecopyresampled() solltest du imagecopyresized() vorziehen, da du so wesentlich bessere Qualität erreichst:
22.3. Wie kann ich Bilder verkleinern?
http://www.php-faq.de/q/q-grafik-verkleinern.html
|
26.10.2006, 22:21:52
|
Anfänger
|
|
Registriert seit: Oct 2006
Beiträge: 9
|
|
AW: Thumbnails erstellen
Also... ich hab's jetzt endlich geschafft. Aber ich habe mal eine prinzipielle Frage:
In PHP existieren nur die Funktionen ImageCreateFromGIF(), ImageCreateFromJPEG() und ImageCreateFromPNG(). Aber keine für bspw. BMP-Dateien.
Trotzdem ist es ja möglich, auch von BMP-Dateien Thumbnails zu erzeugen.
Das gibt's ja auch hier in diesem Forum - vBulletin kann das ja. Nur wie macht es dies?
Wie erzeugt man Thumbnails ohne die ImageCreateFromXXX()-Funktionen?
|
26.10.2006, 23:47:54
|
Member
|
|
Registriert seit: Jun 2006
Ort: Bayern
Alter: 56
Beiträge: 930
|
|
AW: Thumbnails erstellen
Was deine Frage zu BMP angeht, kann ich dir nicht weiterhelfen. Da ich dieses Format nicht im Web einsetzen würde und , wenn es eine bessere Qualität wie JPG sein soll, würde ich PNG vorziehen.
Resample heißt soviel wie neu berechnen. Allerdings gibt es dafür sehr unterschiedliche Methoden (Bikubisch,Bilinear). Welche aber bei imagecopyresampled() herangezogen wird weiß ich nicht und hab ich aus der Doku nicht erfahren können. Oder ich hab es einfach nicht gefunden.
Auch, wenn in dem Link von xabbuh beschrieben wird, dass diese Funktion bessere Ergebnisse liefern soll. Kann ich dies nicht wirklich nachvollziehen. Es steht schon nicht im Verhältnis Performance zu Bildqualität. Mit imagecopyresampled() braucht die Bilderstellung bald doppelt so lang wie mit imagecopyresized(). Die Serverlast ist mit Resample um 30% höher und die erstellte Datei ist auch größer. Die Bilddaten wie Tonwert sprechen da auch eine andere Sprache. Bei dem gleichen Ausgangsbild liefern beide erstellten Bilder fast identische Werte. Visuell ist gleich gar kein Unterschied zu erkennen.
Der Nutzen dieser Funktion gegenüber imagecopyresized() ist in meinen Augen gleich Null. Wenn man hochwertigere Ergebnisse erhalten möchte sollte man lieber auf ein Grafikprogramm setzen statt auf PHP-Funktionen.
__________________
Grüße Andes
|
Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
|
|
Themen-Optionen |
|
Ansicht |
Linear-Darstellung
|
Forumregeln
|
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.
HTML-Code ist aus.
|
|
|
Alle Zeitangaben in WEZ +2. Es ist jetzt 11:54:59 Uhr.
|