Ich erstelle derzeit eine PHP-Website, wo Benutzer Bilder hochladen können, die dann in einer angemessenen Größe geändert werden müssen. Meine PHP-Konfiguration ist auf ein Speicherlimit von 50 MB eingestellt.Reduzierung der php Speicherverbrauch für Bildgrößenänderung
Das Problem ist, wenn Bilder über 5mb hochgeladen werden, php ist nicht in der Lage, das Bild zu vergrößern (wegen zu viel Gedächtnisgebrauch). Also habe ich mich gefragt, ob es sowieso eine Optimierung der Speichernutzung von Bildern in der Größe gibt. Hier ist, was ich zur Zeit verwenden:
class Image {
var $uploaddir;
var $quality = 80;
var $ext;
var $dst_r;
var $img_r;
var $img_w;
var $img_h;
var $output;
var $data;
var $datathumb;
function setFile($src = null) {
$this->ext = strtoupper(pathinfo($src, PATHINFO_EXTENSION));
if(is_file($src) && ($this->ext == "JPG" OR $this->ext == "JPEG")) {
$this->img_r = ImageCreateFromJPEG($src);
} elseif(is_file($src) && $this->ext == "PNG") {
$this->img_r = ImageCreateFromPNG($src);
} elseif(is_file($src) && $this->ext == "GIF") {
$this->img_r = ImageCreateFromGIF($src);
}
$this->img_w = imagesx($this->img_r);
$this->img_h = imagesy($this->img_r);
}
function resize($largestSide = 100) {
$width = imagesx($this->img_r);
$height = imagesy($this->img_r);
$newWidth = 0;
$newHeight = 0;
if($width > $height){
$newWidth = $largestSide;
$newHeight = $height * ($newWidth/$width);
}else{
$newHeight = $largestSide;
$newWidth = $width * ($newHeight/$height);
}
$this->dst_r = ImageCreateTrueColor($newWidth, $newHeight);
imagecopyresampled($this->dst_r, $this->img_r, 0, 0, 0, 0, $newWidth, $newHeight, $width, $height);
$this->img_r = $this->dst_r;
$this->img_h = $newHeight;
$this->img_w = $newWidth;
}
function createFile($output_filename = null) {
if($this->ext == "JPG" OR $this->ext == "JPEG" OR $this->ext == "PNG" OR $this->ext == "GIF") {
imageJPEG($this->dst_r, $this->uploaddir.$output_filename.'.'."jpg", $this->quality);
} /*elseif($this->ext == "PNG") {
imagePNG($this->dst_r, $this->uploaddir.$output_filename.'.'.$this->ext);
} elseif($this->ext == "GIF") {
imageGIF($this->dst_r, $this->uploaddir.$output_filename.'.'.$this->ext);
}*/
$this->output = $this->uploaddir.$output_filename.'.'.$this->ext;
}
function setUploadDir($dirname) {
$this->uploaddir = $dirname;
}
function flush() {
$tempFile = $_FILES['Filedata']['tmp_name'];
$targetPath = $_SERVER['DOCUMENT_ROOT'] . $_REQUEST['folder'] . '/';
$targetFile = str_replace('//','/',$targetPath) . $_FILES['Filedata']['name'];
imagedestroy($this->dst_r);
unlink($targetFile);
imagedestroy($this->img_r);
}
Und dann zum Ändern der Größe ich tue:
$tempFile = $_FILES['Filedata']['tmp_name'];
$targetPath = $_SERVER['DOCUMENT_ROOT'] . $_REQUEST['folder'] . '/';
$targetFile = str_replace('//','/',$targetPath) . $_FILES['Filedata']['name'];
move_uploaded_file ($tempFile, $targetFile);
$image = new Image();
$image->setFile($targetFile);
$image->setUploadDir($targetPath);
$image->resize(200);
$image->createFile(md5($id));
$image->flush();
Ich bin Strom mit Uploadify, aber es nutzt diese Upload/script ändern. Gibt es trotzdem eine Optimierung dieses Codes, so dass weniger Speicher benötigt wird?
Thanks :)
Danke, ich dachte, es war nicht die tatsächliche Dateigröße, aber die Dateiauflösung war das Problem. Ich habe den von Ihnen angegebenen Link zur Validierung verwendet. Danke vielmals. Ich habe auch .htaccess verwendet, um das Speicherlimit zu erhöhen, da ich Bilder mit 2848 x 4288 (12mp) nicht hochladen konnte, was für ein Bild mit einer Kamera ziemlich normal ist. – AzaraT