PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : bilder mit php bearbeiten



deliarmin
12-04-2002, 13:24
ich habe für eine Homepage ein kleines CMS programmiert. Jetzt wollte ich noch, dass wenn ich ein Bild auf die Seite hochlade, php das Bild auf eine bestimmte Größe resized. Die GD Bibliothek von Thomas Boutell kenn ich schon, allerdings kann ich damit die Bilder nicht in der veränderten Version auf dem Server speichern (Zumindest hab ich nicht verstanden wie es gehen kann), sondern nur zur Ausgabe an den Browser senden. Im Prinzip würde das ja reichen, doch dann blas ich mir den Webspace unnötig auf.

Kann mir da jemand weiterhelfen?

Armin

crac
12-04-2002, 13:43
Jetzt wollte ich noch, dass wenn ich ein Bild auf die Seite hochlade, php das Bild auf eine bestimmte Größe resized.

ich benutze dafuer imagemagick, und zwar sieht dann das etwa so aus:



// image_compress: In Thumbnails umwandeln
// -----------------------------------------
function image_compress($userfile,$user_id){

global $GALLERY, $GALLERY_KL;
require_once("functions/rum_functions.php");

if(!isset($userfile)) return "FEHLER!";

$old = GALLERY.$userfile;
$new = GALLERY_KL.$userfile;

$array = explode(".", $userfile);

// falls kein jpg --> umwandeln
if(strtolower($array[1]) != "jpg"){
$tmp = GALLERY.$array[0].".jpg";
$v = "convert $old $tmp";
$v = escapeshellcmd($v);
$shell = exec($v);
unlink($old);

$old = $tmp;
$new = GALLERY_KL.$array[0].".jpg";
}

// bilder werden auf die entsprechende groesse skaliert
// 90: thumbnails
// 600x500>: maximale breite x maximale hoehe fuer _normales_ bild
$t = "convert -scale 90 $old $new";
$u = "convert -scale 600x500> $old $old";
$t = escapeshellcmd($t);
$u = escapeshellcmd($u);

system('chmod 660 '.GALLERY.'*.jpg');
system('chmod 660 '.GALLERY_KL.'*.jpg');

$shell = exec($t);
$shell = exec($u);

// dem benutzer einen punkt geben
benutzer_beitraege($user_id);

return "Bild gespeichert...";
}
// -----------------------------------------


in dieser funktion werden zum einen thumbnails (breite=90) und alle bilder, welche den anforderungen (max hoehe=500, max breite=600) nicht entsprechen, skaliert. nachteil, die dateien sind dann doppelt vorhanden (_normal_ und _klein_). natuerlich kannst du das erstellen von den thumbnails auch weglassen, aber es dauert einfach viel laenger zum aufbauen der seite...

deliarmin
12-04-2002, 14:07
Danke vorerst einmal. Genau so etwas habe ich gesucht.
Allerdings habe ich ein Problem. Ich kann auf dem Server, auf dem das CMS läuft nichts installieren (Ist ein öffentlicher Provider) Jetzt hätte ich eine Möglichkeit gesucht, die mit den php Standardfunktionen läuft, bzw. mit der gd Bibliothek.

Ich werd schon eine Lösung finden.

Okay noch mal Danke & vielleicht fällt irgendjemanden ja irgendetwas ein.

Armin

Alex_K
13-04-2002, 13:30
http://www.php.net/manual/de/function.imagejpeg.php

habs selber noch nicht verwendet, aber laut php.net sollte es funktionieren ...

Daniel666
19-04-2002, 22:57
Hi

Ich hab auch nach sowas gesucht, aber wo geb' ich in dem PHP Skript die Größe des zu erstellenden Bildes an? Die Qualität bzw. Komprimierung kann ich ja verändern, aber die Größe?

crac
20-04-2002, 11:05
@Daniel666

wenn du die php-eigenen funktionen benutzen moechtest sieht das etwa so aus:



$im = @ImageCreateFromJPEG ($imgname); /* Versuch, Datei zu öffnen */

if (!$im) {
$im = ImageCreate (150, 30); /* Erzeugen eines leeren Bildes (int x, int y) */
// hier kommen weitere schritte fuer die bearbeitung


wenn du mein kleines skript benutzen moechtest, kannst du lediglich folgende werte aendern:



// bilder werden auf die entsprechende groesse skaliert
// 90: thumbnails (maximale breite und maximale hoehe)
// 600x500>: maximale breite x maximale hoehe fuer _normales_ bild
$t = "convert -scale 90 $old $new";
$u = "convert -scale 600x500> $old $old";

Daniel666
20-04-2002, 17:15
Dein Skript kann ich leider nicht benutzen, hab das gleiche Problem wie deliarmin.
Nur ist diese PHP Funktion nicht ganz das was ich gesucht habe. Wenn das angegebene Bild nicht geöffnet werden kann, wird ja einfach ein neues, leeres Bild erstellt. Ich wollte ja von einem vorhandenen Bild die Größe ändern lassen und es dann ausgeben lassen.
Ich hab aber eine Funktion gefunden, mit der das machbar ist: ImageCopyResized. Ist auch unter http://www.php.net/manual/de/function.imagecopyresized.php beschrieben.

Daniel666
20-04-2002, 18:27
Ich hab mich da jetzt mal "durchgefuchst" und hab das ganze so hinbekommen, wie ich es wollte. Das Bild wird auf eine Größe skaliert, wobei Höhe und Breite nicht größer sein dürfen als 100 (im Bsp). Das Ganze wird dann in einem Unterordner "thumbs" unter dem selben Dateinamen abgelegt.



$image = bla.jpg;
$width = 100; //maximale Höhe
$height = 100; //maximale Breite
$qual = 20; //Komprimierung

$size = getimagesize("$image");

if( $size[0] > $size[1] )
$height=round($size[1]/$size[0]*$width,0);
else
$width=round($size[0]/$size[1]*$height,0);

$dst_img=ImageCreate($width,$height);
$src_img=ImageCreateFromJPEG("$image");
ImageCopyResized($dst_img,$src_img,0,0,0,0,$width, $height,ImageSX($src_img),ImageSY($src_img));
ImageJPEG($dst_img,"./thumbs/$image",$qual);
ImageDestroy($dst_img);