PictureLoader.php

Aus Programmers Guide

Wechseln zu: Navigation, Suche

Ein Bild ausgeben mit PHP

Das Script sucht in einem übergeben Original-Bild-Pfad nach einem Thumbnail Bild. Ist dieses nicht vorhanden, so versucht es dieses zu erzeugen und auszugeben.

<?php
//Aufruf:
//Höhe und Breite bestimme ich vorher mit Javascript
//Bsp. pictureLoader.php?file=U2FhbGV0&width=800&height=600&aktname=Bild%201
 
//das Script bekommt den Bildpfad base64 codiert übergeben
//hat den Vorteil, dass wir nicht die Pfadnamen GET-tauglich machen zu müssen
$file = base64_decode($_GET['file']);
 
//Abfangen von groben Fehlern
if(!isset($file) || $file==''){
	echo"kein Bild uebergeben";
	exit;
}
 
//Höhe-Breite-Fehler abfangen, wenn einer kein Javascript hat
if(isset($_GET['height']) && $_GET['height'] != '' && $_GET['height'] != 0){
	$max_height = $_GET['height'];
}else {
	$max_height='800';
}
if(isset($_GET['width']) && $_GET['width'] != '' && $_GET['width'] != 0){
	$max_width = $_GET['width'];
}else {
	$max_width='800';
}
 
//pfad anlegen, wenn er nicht existiert
if(!file_exists($path_to_pic_temp)){
	mkdir($path_to_pic_temp) or die("fehler beim anlegen den temp-pfades!");
}
 
$pfad_aktuell = $path_to_pic_temp.$_GET['aktname'].'/';
if(!file_exists($pfad_aktuell)){
	mkdir($pfad_aktuell) or die("fehler beim anlegen den temp-bilderarchiv-pfades!");
}
 
$tempimage = $pfad_aktuell.basename($file);
 
if(file_exists($tempimage)){
//wenns das Bild gibt
	$image = imagecreatefromjpeg($tempimage);
}else{
//wenn es nicht existent ist
	if(copy($pfad_zur_phpthumb.'?src='.$file.$phpthumb_zusaetze,$tempimage)){
		//Ich versuche das Bild mit PHP-Thumb zu erzeugen 
		$image = imagecreatefromjpeg($tempimage);
	}else{
		//schägt auch dies Fehl...Fehlerbild erzeugen
		$image = imagecreatetruecolor(400,400);
		$col = imagecolordeallocate($image,255,255,255);
		imagestring($image,2,5,5,"fehler beim kopieren!",$col);
	}
 
}
 
//
//so, wir haben also ein Bild, ob nun neu erzeugt oder ein Fehlerbild...wir haben ein Bild :)
//
 
//Bildgröße bestimmen
list($width, $height, $image_type) = getimagesize($tempimage);
 
//Verhältnis
$x_ratio = $max_width / $width;
$y_ratio = $max_height / $height;
 
//Das Bild so berechnen, dass es nicht größer als der Monitor ist
if( ($width <= $max_width) && ($height <= $max_height) ){
	$tn_width = $width;
	$tn_height = $height;
}elseif (($x_ratio * $height) < $max_height){
	$tn_height = ceil($x_ratio * $height);
	$tn_width = $max_width;
}else{
	$tn_width = ceil($y_ratio * $width);
	$tn_height = $max_height;
}
 
//ein neues Bild mit richtiger Größe erzeugen
$tmp = imagecreatetruecolor($tn_width,$tn_height);
//dort dass aktuelle Bild reinkopieren
imagecopyresampled($tmp,$image,0,0,0,0,$tn_width, $tn_height,$width,$height);
 
//Ausgabe des Bildes
header('Content-type: '.image_type_to_mime_type($image_type));
imageinterlace($tmp,1);
//NULL heißt: nur ausgeben, nicht auf Server speichern
//80 heißt: JPEG-Qualität
imagejpeg($tmp,NULL,80);
imagedestroy($image);
imagedestroy($tmp);
?>
Persönliche Werkzeuge