| (Web-) Design und webbasierte Sprachen Tipps & Tricks, Designabgleich, HTML & Javascript, Flash, ASP, PHP, Perl/CGI... |
Dynamisches generieren von Bildern + Wasserzeichen
Diskussion: Dynamisches generieren von Bildern + Wasserzeichen im Forum (Web-) Design und webbasierte Sprachen, in der Kategorie Web, Network & Multimedia Palace; Anzeige
Guten Tag zusammen,
ich hab folgendes gecodet:
PHP-Code:
<?php header ( 'Content-type: image/jpeg' ); require( '../conf/functions.inc' ); /** * Gallerieordner */ ...
 |
25.05.08, 16:26
|
#1 (permalink)
|
Registriert seit: 10.01.06 Likes: 0 | Dynamisches generieren von Bildern + Wasserzeichen Anzeige Guten Tag zusammen,
ich hab folgendes gecodet: PHP-Code: <?php header('Content-type: image/jpeg'); require('../conf/functions.inc');
/** * Gallerieordner */ $dir = '../images/gallery/';
/** * Pfad zum Wasserzeichen */ $watermark = '../images/gallery/watermark.png';
/** * Skalierungsfaktor */ $ScaleFactor = xyz;
/** * Dateinamenerweiterung rausfinden */ function getExt($str) { return strtolower(substr($str, strrpos($str, '.') + 1, 3)); }
// Sonderzeichen alá Leerzeichen am Anfang und Ende der übergebenen Variablen löschen $reqDir = trim($_REQUEST['dir']); $reqImg = trim($_REQUEST['img']);
// Prüfen, ob Datei existiert und dann Imageresourcen erstellen if(file_exists($dir . $reqDir . '/' . $reqImg)) { switch(getExt($reqImg)) { case 'gif': $imgSrc = imagecreatefromgif($dir . $reqDir . '/' . $reqImg); break; case 'jpg': $imgSrc = imagecreatefromjpeg($dir . $reqDir . '/' . $reqImg); break; case 'png': $imgSrc = imagecreatefrompng($dir . $reqDir . '/' . $reqImg); break; default: trigger_error('Bildformat wird nicht unterstützt', E_USER_WARNING); break; } } // Verfahre mit Wasserzeichen ebenso if(file_exists($watermark) && is_readable($watermark)) { switch(getExt($watermark)) { case 'jpg': $imgWm = imagecreatefromjpeg($watermark); break; case 'png': $imgWm = imagecreatefrompng($watermark); break; default: trigger_error('Bildformat wird nicht unterstützt', E_USER_WARNING); break; } } // Breite und Höhe der Bilder ermitteln $imgSrcWidth = imagesx($imgSrc); $imgSrcHeight = imagesy($imgSrc); $imgWmWidth = imagesx($imgWm); $imgWmHeight = imagesy($imgWm);
// Skalierung $scaledwidth = $imgSrcWidth; $scaledheight = $imgSrcHeight;
// Neues Bild erstellen $img = imagecreatetruecolor($scaledwidth, $scaledheight);
// Bild in das Neuerstellte einfügen imagecopy($img, $imgSrc, 0, 0, 0, 0, $scaledwidth, $scaledheight);
// Wasserzeichen einfügen imagecopy($img, $imgWm, $scaledwidth - $imgWmWidth, $scaledheight - $imgWmHeight, 0, 0, $imgWmWidth, $imgWmHeight);
imagejpeg($img); // JPEG erstellen imagedestroy($img); // JPEG löschen ?> Jedoch möchte ich noch eine Skalierung einbauen, ich bekomme es aber überhaupt nicht hin. Wäre nett wenn mir einer da helfen könnte.
Über Tipps, hinsichtlich Performance o.Ä. würde ich mich auch freuen |
| |
26.05.08, 18:30
|
#2 (permalink)
|
Registriert seit: 09.02.08 Likes: 0 | Ich versteh das Problem nicht ganz. Oder hilft dir imagecopyresized/imagecopyresampled? |
| | | |
| | HaBOT
| - Anzeige - |
| |
26.05.08, 18:55
|
#3 (permalink)
| Themenstarter
Registriert seit: 10.01.06 Likes: 0 | ja shcon würde es mir helfen nur ich seh vor lauter Bäumen den Wald nciht mehr ôo |
| |
26.05.08, 19:44
|
#4 (permalink)
|
Registriert seit: 09.02.08 Likes: 0 | Ich habe es selber auch nur mit rumtesten benutzt, was ich hier schreibe ist NICHT GETESTET UND ALLE ANGABEN SIND OHNE GEWÄHR! PHP-Code: int imagecopyresized ( resource $dst_im , resource $src_im , int $dstX , int $dstY , int $srcX , int $srcY , int $dstW , int $dstH , int $srcW , int $srcH )
$dst_im = Das mit imageCreate erzeugte leere Bild
$src_im = Die Bildquelle (mit imagecreatefrompng erstellt)
$dstX/$dstY = Position im Zielbild
$srcX/$srcY = Obere Ecke des Ausschnitts von einzufügenden Bild
$dstW/$dstH = Größe des einzufügenden Bilds im Zielbilds
$srcW/$srcH = Größe des Ausschnitts von einzufügenden Bild |
| |
27.05.08, 20:48
|
#5 (permalink)
| Themenstarter
Registriert seit: 10.01.06 Likes: 0 | hm ich bekomsm einfach zum verrecken nicht hin das Bild zu skalieren >.< |
| |
27.05.08, 23:57
|
#6 (permalink)
| | Member of Honour
Registriert seit: 22.02.07 Likes: 77 | ich hab mal in meinen alten Scripten gewühlt und noch bissl durchkommentiert... PHP-Code: <?
//Oh man, auf was fuer Ideen ich alles kam, als ich noch keine regulären Ausdrücke beherrscht hab... :-) function filename_base($file) { // Gibt den Dateinamen ohne Dateiendung zurueck $f=explode(".",$file); $ret=""; for($i=0;$i<(sizeof($f)-1);$i++) { if($ret!=""){$ret.=".";} $ret.=$f[$i]; } return $ret; }
//noch ein Exemplar von "Oh man, auf was fuer Ideen ich alles kam, als ich noch keine regulären Ausdrücke beherrscht hab..." :-) function filename_ext($file) { // Gibt die Dateiendung einer Datei zurueck $f=explode(".",$file); return $f[sizeof($f)-1]; }
//Bildverkleinerungsfunktion function thumb($file, $save, $width, $height, $prop = TRUE) { $ret=true; // Requires GD-Lib > 2.0 // Ist $prop=TRUE, so werden die Proportionen des Bildes // auch in der verkleinerten Version eingehalten @unlink($save); $infos = @getimagesize($file); if($prop) { // Proportionen erhalten $iWidth = $infos[0]; $iHeight = $infos[1]; $iRatioW = $width / $iWidth; $iRatioH = $height / $iHeight; if ($iRatioW < $iRatioH) { $iNewW = $iWidth * $iRatioW; $iNewH = $iHeight * $iRatioW; } else { $iNewW = $iWidth * $iRatioH; $iNewH = $iHeight * $iRatioH; } } else { // Strecken und Stauchen auf Größe $iNewW = $width; $iNewH = $height; }
if($infos[2] == 2) { // Bild ist vom Typ jpg $imgA = imagecreatefromjpeg($file); $imgB = imagecreatetruecolor($iNewW,$iNewH);
imagecopyresampled($imgB, $imgA, 0, 0, 0, 0, $iNewW, $iNewH, $infos[0], $infos[1]);
//Ziel-Format anhand der Dateinamen-Erweiterung if(strtolower(filename_ext($save))=="jpg"){imagejpeg($imgB, $save);} elseif(strtolower(filename_ext($save))=="jpeg"){imagejpeg($imgB, $save);} elseif(strtolower(filename_ext($save))=="png"){imagepng($imgB, $save);}
imagedestroy($imgA); imagedestroy($imgB);
} elseif($infos[2] == 3) { // Bild ist vom Typ png $imgA = imagecreatefrompng($file); $imgB = imagecreatetruecolor($iNewW, $iNewH); imagecopyresampled($imgB, $imgA, 0, 0, 0, 0, $iNewW, $iNewH, $infos[0], $infos[1]);
//Ziel-Format anhand der Dateinamen-Erweiterung if(strtolower(filename_ext($save))=="jpg"){imagejpeg($imgB, $save);} elseif(strtolower(filename_ext($save))=="jpeg"){imagejpeg($imgB, $save);} elseif(strtolower(filename_ext($save))=="png"){imagepng($imgB, $save);}
imagedestroy($imgA); imagedestroy($imgB);
} else { $ret=false; } return $ret; }
//ANWENDUNG: //========================================================================= //da die Funktion thumb() bei zu starken Verkleinerungen (z.B. von 5 Megapixel auf 120x80px Thumbnail) irgendwo Mist baut (Division durch 0), hier ein kleiner WorkAround:
$bild="foo_bar.jpg"; $max=800; (groessere Seite des Bildes soll 800px groß sein)
$infos = @getimagesize($bild); //prüfen, ob eine der beiden Seiten groesser als das gewuenschte Maximum ist if($infos[1]>$max OR $infos[0]>$max) { //den groesseren der beiden Dimensions-Werte zur Berechnung nutzen if($infos[1]>$infos[0]){$wert=$infos[1];} else{$wert=$infos[0];}
$i=0; //fuer Sicherungskopie - um festzustellen, ob die Schleife zum ersten Mal durchlaeuft //LANGSAMES RUNTER-SCHRUMPFEN do { //ich hab die Bilder immer nur um den Faktor 1.8 kleiner gemacht... man kann auch mehr mit einmal probieren... bei zu starker Verkleinerung verursacht die thumb()-Funktion jedoch eine Division durch Null $wert=$wert/1.8;
//Wert, auf den skaliert werden soll - wenn der Wert durch Berechnung kleiner wird, als der Zielwert, dann setze ihn auf den Ziel-Wert if($wert<$max){$wert=$max;}
$orig=$bild; $orig2=filename_base($bild)."_orig.".filename_ext($bild); $cp=filename_base($bild)."_neu.".filename_ext($bild); if($i++==0){copy($orig,$orig2);} //beim ersten Durchlauf eine Kopie erstellen else { if(file_exists($orig2)){unlink($orig2);} copy($cp,$orig2); } thumb($orig2,$cp,$max,$max); unlink($orig2); } while($wert>$max); }
?> |
| |  | | |
| | | - Anzeige - |
| | [HaBo]
» Web, Network & Multimedia Palace
» (Web-) Design und webbasierte Sprachen
»
Dynamisches generieren von Bildern + Wasserzeichen
| 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. | | |
|