Bilder beim Hochladen selber zuschneiden.
Hallo meine lieben,
ich besitze ein Flirt Community Script und dort ist imageupload file , wenn die mitglieder die fotos hochladen, wird das automatisch auf 240x320 zugeschnitten, aber das foto wird nicht verkleinert , es wird geschnitten und zwar nur die linke seite vom foto, also wenn man ein foto hat 640x480 wird einfach auf 240x320 geschnitten und wenn man z.b. auf dem foto in der mitte steht, wird einfach halber körper weggeschnitten.
kann man das den nicht umarbeiten , das dass foto in der mitte geschitten wird?
hier ist die _class_imageupload
PHP-Code:
<?php
class imageupload extends fileupload
{
var $prefix;
var $uploadpath;
var $thumbnailwidth;
var $thumbnailheight;
var $allowedextensions;
var $_FILES;
function imageupload($prefix, $inputfield, $uploadpath, $thumbnailwidth, $thumbnailheight)
{
$this->prefix = $prefix;
$this->uploadpath = $uploadpath;
$this->thumbnailwidth = $thumbnailwidth;
$this->thumbnailheight = $thumbnailheight;
$this->allowedextensions = array("jpg", "jpeg", "png");
$this->_FILES = &$_FILES[$inputfield];
}
function doupload($insert_id, $createthumbnail, $copywatermark, $quality="75", $transition="100")
{
$extension = $this->getextension();
if(preg_match("/jpg|jpeg/", $extension)) $newimage = @imagecreatefromjpeg($this->_FILES['tmp_name']);
elseif(preg_match("/png/", $extension)) $newimage = @imagecreatefrompng($this->_FILES['tmp_name']);
if(!$newimage)
{
return FALSE;
}
$imagewidth = imagesx($newimage);
$imageheight = imagesy($newimage);
//--------------------------Erstelt klein bild----------------------------
if($createthumbnail)
{
if(function_exists("imagecreatetruecolor")) $thumbnail = imagecreatetruecolor($this->thumbnailwidth, $this->thumbnailheight);
else $thumbnail = imagecreate($this->thumbnailwidth, $this->thumbnailheight);
if($imagewidth > $imageheight)
{
$thumbnailwidth = $this->thumbnailwidth;
$thumbnailheight = round(($this->thumbnailwidth / $imagewidth) * $imageheight);
if($thumbnailheight < $this->thumbnailheight)
{
$thumbnailwidth = round(($this->thumbnailheight / $thumbnailheight) * $thumbnailwidth);
$thumbnailheight = $this->thumbnailheight;
}
}
else
{
$thumbnailwidth = round(($this->thumbnailheight / $imageheight) * $imagewidth);
$thumbnailheight = $this->thumbnailheight;
if($thumbnailwidth < $this->thumbnailwidth)
{
$thumbnailheight = round(($this->thumbnailwidth / $thumbnailwidth) * $thumbnailheight);
$thumbnailwidth = $this->thumbnailwidth;
}
}
if(function_exists("imagecopyresampled")) imagecopyresampled($thumbnail, $newimage, 0, 0, 0, 0, $thumbnailwidth, $thumbnailheight, $imagewidth, $imageheight);
else imagecopyresized($thumbnail, $newimage, 0, 0, 0, 0, $thumbnailwidth, $thumbnailheight, $imagewidth, $imageheight);
$extension = "jpg"; // überschreibt die datei ändung der erstelten datei in jpg
$thumbnailsavepath = "./".$this->uploadpath."/".$this->prefix.$insert_id.".".$extension; // Dateiname + ändung $extension
if(preg_match("/jpg|jpeg/", $extension)) $check = @imagejpeg($thumbnail, $thumbnailsavepath, $quality);
elseif(preg_match("/png/", $extension)) $check = @imagepng($thumbnail, $thumbnailsavepath, $quality);
imagedestroy($thumbnail);
$newimage = @imagecreatefromjpeg($this->uploadpath."/".$this->prefix.".jpg");
$imagewidth = imagesx($newimage);
$imageheight = imagesy($newimage);
if(!$check)
{
imagedestroy($newimage);
return FALSE;
}
}
//-------------------------Wasserzeichen---------------------------------------------
if($copywatermark)
{
$watermark = imagecreatefrompng("images/watermark.png");
$watermarkwidth = imagesx($watermark);
$watermarkheight = imagesy($watermark);
$transparent = imagecolorat($watermark, 1, 1);
imagecolortransparent($watermark, $transparent);
imagecopymerge($newimage, $watermark, $imagewidth - $watermarkwidth - 3, $imageheight - $watermarkheight - 3, 0, 0, $watermarkwidth, $watermarkheight, $transition);
imagedestroy($watermark);
}
$imagesavepath = "./".$this->uploadpath."/".$this->prefix.$insert_id.".".$extension;
if(preg_match("/jpg|jpeg/", $extension)) $check = @imagejpeg($newimage, $imagesavepath, 100);
elseif(preg_match("/png/", $extension)) $check = @imagepng($newimage, $imagesavepath, 100);
imagedestroy($newimage);
if(!$check)
{
unlink($thumbnailsavepath);
return FALSE;
}
return TRUE;
}
}
?>
AW: Bilder beim Hochladen selber zuschneiden.
Vielleicht eine blöde Idee, aber schneide doch die Bilder mit einem Bildprogramm schon vor dem Hochladen zu, dann ersparst Du dir den nachträglichen Zuschnitt.
AW: Bilder beim Hochladen selber zuschneiden.
hehe, naja nicht jeder user kommt auf die idee, aber wenn da 400 user auf der seite sind und die laden alle die fotos hoch , ist es schon ab und zu mal ärgerlich das auf dem foto hinterher nur halbes gesicht zu sehen ist. aber danke dir für den vorschlag hehe:D
also währe nicht schlecht wenn man selber entscheiden könnte wie das foto geschnitten wird oder zumindestens z.b. von 640x480 auf 320x240 oder oder sowas.
AW: Bilder beim Hochladen selber zuschneiden.
Hallo.
Leider (wie in der Ankündigung geschrieben), kann ich keine komplette Lösung geben. Stichwort aber, PHP GD. Das ist die Grafikbibliothek für PHP.
Referenz: http://de.php.net/manual/de/ref.image.php
Anwendungsbesiepiel Bild verkleinern: http://blog.t-error.ch/article/427/b...x_verkleinern/
Viel Erfolg!
Marc
AW: Bilder beim Hochladen selber zuschneiden.
Aber könntest du mir nicht verraten wie man im diesen text etwas ändert damit das bild nicht geschnitten wird sondern einfach vom z.b. 640x480 einfach verkleinert also das bild bleibt wird aber einfach nur verkleinert auf 320x240 also 240 breite und 320 höhe .
oder das es nicht vom linke seite raus geschnitten wird, sondern aus der mitte:
PHP-Code:
if($createthumbnail)
{
if(function_exists("imagecreatetruecolor")) $thumbnail = imagecreatetruecolor($this->thumbnailwidth, $this->thumbnailheight);
else $thumbnail = imagecreate($this->thumbnailwidth, $this->thumbnailheight);
if($imagewidth > $imageheight)
{
$thumbnailwidth = $this->thumbnailwidth;
$thumbnailheight = round(($this->thumbnailwidth / $imagewidth) * $imageheight);
if($thumbnailheight < $this->thumbnailheight)
{
$thumbnailwidth = round(($this->thumbnailheight / $thumbnailheight) * $thumbnailwidth);
$thumbnailheight = $this->thumbnailheight;
}
}
else
{
$thumbnailwidth = round(($this->thumbnailheight / $imageheight) * $imagewidth);
$thumbnailheight = $this->thumbnailheight;
if($thumbnailwidth < $this->thumbnailwidth)
{
$thumbnailheight = round(($this->thumbnailwidth / $thumbnailwidth) * $thumbnailheight);
$thumbnailwidth = $this->thumbnailwidth;
}
}
if(function_exists("imagecopyresampled")) imagecopyresampled($thumbnail, $newimage, 0, 0, 0, 0, $thumbnailwidth, $thumbnailheight, $imagewidth, $imageheight);
else imagecopyresized($thumbnail, $newimage, 0, 0, 0, 0, $thumbnailwidth, $thumbnailheight, $imagewidth, $imageheight);
$extension = "jpg"; // überschreibt die datei ändung der erstelten datei in jpg
$thumbnailsavepath = "./".$this->uploadpath."/".$this->prefix.$insert_id.".".$extension; // Dateiname + ändung $extension
if(preg_match("/jpg|jpeg/", $extension)) $check = @imagejpeg($thumbnail, $thumbnailsavepath, $quality);
elseif(preg_match("/png/", $extension)) $check = @imagepng($thumbnail, $thumbnailsavepath, $quality);
imagedestroy($thumbnail);
$newimage = @imagecreatefromjpeg($this->uploadpath."/".$this->prefix.".jpg");
$imagewidth = imagesx($newimage);
$imageheight = imagesy($newimage);
if(!$check)
{
imagedestroy($newimage);
return FALSE;
}
}
AW: Bilder beim Hochladen selber zuschneiden.
Verraten kann ich dirs:
if(function_exists("imagecopyresampled")) imagecopyresampled($thumbnail, $newimage, 0, 0, 0, 0, $thumbnailwidth, $thumbnailheight, $imagewidth, $imageheight);
else imagecopyresized($thumbnail, $newimage, 0, 0, 0, 0, $thumbnailwidth, $thumbnailheight, $imagewidth, $imageheight);
Da musste die entsprechenden GD funktionen einfügen. Hab jedoch kein PHP Intepreter und auch nicht deine "Community" um die entsprechenden Befehle zu testen. Bin ja kein Compiler, müsste das was ich code schon debuggen und das fällt ja nun mal weg. Also zu deutsch: ich kann ja schlecht was programmieren, was ich weder im Modul noch Integrationstest probieren kann.
Trotzdem schönen Abend.