Teil von  SELFPHP
Letztes Update: 14.09.2007 09:07:01

Navigation

Seite Startseite
Seite Aktuelles
Seite Seite News*
Seite Seite Pressemitteilungen*
Seite SELFPHP
Seite Seite Über SELFPHP
Seite Seite Werbung
Seite Seite Kontakt
Seite Seite Unsere Banner
Seite Seite Impressum
Seite Qozido
Seite Seite Diving Edition
Seite Seite Snorkeling Edition
Seite SELFPHP Dokumentation
Seite Seite PHP-Skripte
Seite Seite PHP Befehlsreferenz
Seite Seite PHP 5 Praxisbuch
Seite Seite PHP Code Snippets
Seite Seite SELFPHP in Buchform
Seite Anbieterverzeichnis
Seite Seite Globale Branchen
Seite Seite Webhosting/Server
Seite Services
Seite Seite Forum*
Seite Seite RSS-Feeds*
Seite Seite Downloads*
Seite Seite Gratis-Video-Lektionen*
Seite Seite SELFPHP auf Heft-CD*
Seite Seite Newsletter*
Seite Internet Security
 sponsored by  
Seite Stellenangebote*
Sedo - Bei uns wird PHP großgeschrieben
Seite Premium-Partner   
Webhosting/Serverlösungen
Seite Produktempfehlung   
Seite Seite SteadyBackup

 
* Link führt ins Internet


Anbieterverzeichnis
Informieren Sie sich über die Unternehmen in unserem Anbieterverzeichnis!  
 


SELFPHP Forum
Fragen rund um die Themen PHP? In über 100.000 Beiträgen finden Sie sicher die passende Antwort!*  


Newsletter
Abonnieren Sie hier den kostenlosen SELFPHP Newsletter!*

Vorname: 
Name:
E-Mail:
 




 

Vorschaubilder wahlweise in Farbe oder Graustufen erstellen


Systemvoraussetzung

  • Linux
  • Windows
  • PHP 5
  • GDLib

Datei(en)

create_gray_thumb.php

Problem

Sie haben eine Bildergalerie mit hochauflösenden Farbfotos, möchte aber die Vorschaubilder oder auch eventuell die Farbfotos in Graustufen anzeigen? Ein Grund dafür wäre z.B. das Sie die Farbfotos verkaufen möchten, der potenzielle Kunde aber vor dem Kauf nur ein Graustufenbild sehen darf. Ein anderer Grund wäre z.B. der anfallende Traffic bei der Darstellung der Farbfotos. Graustufenbilder sind wesentlich kleiner als Farbfotos. In unserem Beispiel war das erzeugte Graustufenbild um ca. 25% kleiner als das Farbfoto.

Wir zeigen Ihnen in diesem Beispiel eine Lösung auf, wie Sie aus JPG-, PNG- und GIF-Bildern kleine Vorschaubilder, wahlweise in Farbe oder Graustufen erzeugen. Selbstverständlich können Sie auch die originale Bildergröße beibehalten.

Lösung

Wir wollen hier zeigen, wie Sie aus einer großen Bilddatei ein Vorschaubild erstellen. Dabei achten wir darauf, dass die Proportionen beibehalten werden und bieten zusätzlich die Möglichkeit, das Bild entweder in Farbe oder als Graustufenbild zu erzeugen..

function resizePicture($file, $width, $height, $color = FALSE)
   @param   string     $file
   @param   integer   $width
   @param   string     $height
   @param   bool      $color
   @return   bool

Die Funktion resizePicture() erwartet als Parameter die Bilddatei ($file), die maximal mögliche Bildbreite ($width), die maximal mögliche Bildhöhe ($height) und den optionalen Wert für den Farbmodus ($color)(TRUE = Farbe, FALSE = Graustufen). Im ersten Schritt überprüfen wir, ob die übergebene Datei existiert (6) und brechen die Funktion ab (7), falls dies nicht der Fall ist.

Wir schicken dann einen Header (9) zum Browser, sodass er die Information bekommt, dass im Anschluss ein JPG-Bild übertragen wird. Für unsere weiteren Berechnungen und Kontrollmechanismen benötigen wir noch Informationen über das bestehende Bild (11). Wir ermitteln also mit getimagesize() folgende Bildinformationen, die wir als Array erhalten.

  • Breite des Bildes
  • Höhe des Bildes
  • Grafik-Typ - 1 = GIF, 2 = JPG, 3 = PNG, 4 = SWF
  • HTMLZeichenkette - " height=xx width=xx"

Wir fragen jetzt im nächsten Schritt ab, um welchen Dateityp es sich handelt. Handelt es sich bei unserem Bild um eine GIF-Datei (13), so erstellen wir anhand unseres Bildes ein neues Bild (15) im GIF-Format. Handelt es sich bei unserem Bild um eine JPG-Datei (17), so erstellen wir anhand unseres Bildes ein neues Bild (19) im JPG-Format. Handelt es sich bei unserem Bild um eine PNG-Datei (21), so erstellen wir anhand unseres Bildes ein neues Bild (23) im PNG-Format. Sollte es sich bei der übermittelten Datei weder um eine GIF-, JPG- oder PNG-Datei handeln, so brechen wir die Funktion ab und geben "false" zurück (27).

Im nächsten Schritt (30-37) berechnen wir die neue Proportionen des Bildes. Anhand der übergebenen Werte wird überprüft, wie das Seitenverhältnis neu definiert werden kann. Haben Sie bei dem Funktionsaufruf angegeben, das das neue Bild in Graustufen ausgegeben werden soll (39), so wird mittels der Funktion imagefilter() (nur ab PHP 5 verfügbar) das Bild in seine Graustufen umgerechnet (40).

Wir erzeugen im nächsten Schritt (42) mit imagecreatetruecolor() ein neues Bild und kopieren (44) unser Graustufenbild bzw. unser Farbfoto in das soeben erzeugte Bild. Die Funktion imagecreatetruecolor() erzeugt gegenüber der Funktion imagecreate() eine wesentlich bessere Qualitätsausgabe und sollte daher unbedingt bevorzugt werden. Im letzten Schritt (46) geben wir nur noch unser fertiges Bild aus.

03:
04:
05:
06:
07:
08:
09:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:

45:
46:
47:
48:
function resizePicture($file$width$height, $color = false)
{

    if(!
file_exists($file))
        return 
false;
    
    
header('Content-type: image/jpeg');

    
$info getimagesize($file);

    if(
$info[2] == 1)
    {
        
$image imagecreatefromgif($file);
    }
    elseif(
$info[2] == 2)
    {
        
$image imagecreatefromjpeg($file);
    }
    elseif(
$info[2] == 3)
    {
        
$image imagecreatefrompng($file);
    }
    else
    {
            return 
false;
    }
    
    if (
$width && ($info[0] < $info[1])) 
    {
        
$width = ($height $info[1]) * $info[0];
    } 
    else 
    {
        
$height = ($width $info[0]) * $info[1];
    }

    if(!
$color)
        imagefilter($image, IMG_FILTER_GRAYSCALE);

    
$imagetc imagecreatetruecolor($width$height);

    
imagecopyresampled($imagetc$image0000$width$height
         $info[0], $info[1]);

    
imagejpeg($imagetcnull100);    
    
}
Beispiel: create_gray_thumb.php

Der eigentliche Aufruf für die Erzeugung der Bilder ist relativ simpel. Zunächst benötigen wir den Pfad zum Bild oder den Dateinamen (50), die maximale Bildbreite (52) sowie die maximale Bildhöhe (53). Zusätzlich haben Sie noch die Möglichkeit der Farbausgabe (54) - true bedeutet eine Ausgabe in Farbe, false hingegen eine Ausgabe in Graustufen. Mit all diesen Informationen können Sie die Funktion resizePicture() aufrufen (56) und das Bild erstellen lassen.

50:
51:
52:
53:
54:
55:
56:
$file 'vorschaubilder/DSC_0110.jpg';

$width 100;
$height 50;
$color true;

resizePicture($file$width$height$color);
Beispiel: create_gray_thumb.php

Falls Sie das Programm über eine Website aufrufen und nicht einzeln, sollten Sie das Programm am besten folgendermaßen starten. So wird das Bild direkt als Vorschaubild in Ihre Webseite eingebunden.

1:
<img src="create_thumb.php?file=DSC_0110.jpg">

Sie müssen dann allerdings den Aufruf der Funktion folgendermaßen anpassen:

52:
53:
54:
55:
56:
$width 300;
$height 200;
$color true;

resizePicture
($_GET['file'], $width$height$color);

Nachfolgend sehen Sie zwei Bilder, die mit diesem Programmcode erzeugt wurden. Das originale Farbfoto hatte eine Bildgröße von 3008 x 2000 Pixel.


Originalgröße: 3008 x 2000 - 1,12 MB / Vorschaubildgröße: 250 x 166 - 38,29 KB


Originalgröße: 3008 x 2000 - 1,12 MB / Vorschaubildgröße: 250 x 166 - 28,87 KB

 



 




 sponsored by

Sedo - Bei uns wird PHP großgeschrieben


VERIO - An NTT Communications Company


HighText iBusiness


Webspace-Verkauf.de


video2brain




 Premium-Partner
 Webhosting/Serverlösungen

BPI-Systeme


Premium-Partner Pixel X


Premium-Partner First Colo


Premium-Partner dogado Internet




Qozido


© 2001-2008 E-Mail SELFPHP - Damir Enseleit, info@selfphp.deImpressumKontakt