I have to upload 75MB (JPEG and PNG) images. Getting error like this:
(Fatal error: Out of memory (allocated -1912078336) (tried to allocate 30000 bytes)
If I am uploading 40+, 50+ above png or jpeg.
In this step $new_image = imagecreatetruecolor($width, $height);
if i am uploading 30+ JPG image I am getting error:
Fatal error: Out of memory (allocated -1910767616) (tried to allocate 43200 bytes)
I have also added in .htaccess below PHP values:
php_value upload_max_filesize 2000M
php_value max_input_time 1000
php_value memory_limit 2000M
php_value max_execution_time 20000
php_value post_max_size 2000M
Here is script:
<?php
set_time_limit(300);
ini_set('memory_limit', '64800M');
ini_set("max_execution_time",10000);
ini_set ("display_errors", "1");
error_reporting(E_ALL);
$target_dir = "uploads/";
$unq_name=(mt_rand(10,1000));
$target_file = $target_dir . basename($_FILES["fileToUpload"]["name"]);
$source_photo = 'uploads/'.basename( $_FILES["fileToUpload"]["name"]);
$dest_photo = 'uploads/testing_'.$unq_name.'.'.$imageFileType;
$image = new SimpleImage();
$image->load($source_photo);
$image->scale(50);
$image->save($dest_photo);
class SimpleImage {
var $image; var $image_type;
function load($filename){
$image_info = getimagesize($filename);
$this->image_type = $image_info[2];
if( $this->image_type == IMAGETYPE_JPEG )
{
$this->image = imagecreatefromjpeg($filename);
}
elseif( $this->image_type == IMAGETYPE_GIF )
{
$this->image = imagecreatefromgif($filename);
}
elseif( $this->image_type == IMAGETYPE_PNG )
{
$this->image = imagecreatefrompng($filename);
}
}
function save($filename, $image_type=IMAGETYPE_JPEG, $compression=70, $permissions=null)
{
image_type=$this->image_type;
if( $image_type == IMAGETYPE_JPEG )
{
imagejpeg($this->image,$filename,$compression);
}
elseif( $image_type == IMAGETYPE_GIF )
{
imagegif($this->image,$filename);
}
elseif( $image_type == IMAGETYPE_PNG )
{
imagealphablending($this->image, false);
imagesavealpha($this->image,true);
imagepng($this->image,$filename);
}
if( $permissions != null) {
chmod($filename,$permissions);
}
}
function output($image_type=IMAGETYPE_JPEG)
{
if( $image_type == IMAGETYPE_JPEG )
{
imagejpeg($this->image);
}
elseif( $image_type == IMAGETYPE_GIF )
{
imagegif($this->image);
}
elseif(
$image_type == IMAGETYPE_PNG )
{
imagepng($this->image);
}
}
function getWidth()
{
return imagesx($this->image);
}
function getHeight() {
return imagesy($this->image);
}
function resizeToHeight($height)
{
$ratio = $height / $this->getHeight();
$width = $this->getWidth() * $ratio;
$this->resize($width,$height);
}
function resizeToWidth($width)
{
$ratio = $width / $this->getWidth();
$height = $this->getheight() * $ratio;
$this->resize($width,$height);
}
function scale($scale)
{
$width = $this->getWidth() * $scale/100;
$height = $this->getheight() * $scale/100;
$this->resize($width,$height);
}
function resize($width,$height)
{
$new_image = imagecreatetruecolor($width, $height);
if( $this->image_type == IMAGETYPE_GIF || $this->image_type == IMAGETYPE_PNG)
{
$current_transparent = imagecolortransparent($this->image);
if($current_transparent != -1)
{
$transparent_color = imagecolorsforindex($this->image, $current_transparent);
$current_transparent = imagecolorallocate($new_image, $transparent_color['red'], $transparent_color['green'], $transparent_color['blue']);
imagefill($new_image, 0, 0, $current_transparent);
imagecolortransparent($new_image, $current_transparent);
}
elseif( $this->image_type == IMAGETYPE_PNG)
{
imagealphablending($new_image, false);
$color = imagecolorallocatealpha($new_image, 255, 255, 255, 127);
imagefill($new_image, 0, 0, $color); imagesavealpha($new_image, true);
}
}
imagecopyresampled($new_image, $this->image, 0, 0, 0, 0, $width, $height, $this->getWidth(), $this->getHeight());
$this->image = $new_image;
}
}
?>