2013-11-08 1 views
0

Я ищу помощь. У меня есть следующий код, который загружает изображение & создает миниатюру и сохраняет их в соответствующих папках ... Но моя проблема в пространстве .. загруженные основные изображения HUGE 4320 x 3240, и сайт занимает много времени, чтобы загрузить ... Я хочу только 2 изображения: основной ширину изображения макс 1024, и ширину макс миниатюрами 100 ....Обработка изображений - Загрузить/изменить размер/Создать Thumb & Save

UPDATE: теперь работает масштабируются и основное изображение и создает миниатюру, но работает только на небольших размерах изображения < 2500px в ширину. .. но мне нужно работать на изображение 4320px широкий ....

вот мой код до сих пор:

<?php ob_start(); 
session_start(); 
include("../../config.php"); 
ini_set("memory_limit", "500M"); 
$folder = "../images/stock/".$_SESSION['info_id'].""; 
$thumbs =$folder.'/thumbs/'; 
if(!file_exists($folder)){ 
    mkdir ($folder,0777); 
    $uploadfolder = $folder."/"; 
    //echo $folder.'<br>'; 
    } 
    else 
    { 
     //echo 'folder already created<br>'; 
     $uploadfolder = $folder."/"; 
     //echo $folder.'<br>'; 
    } 

if(!file_exists($thumbs)){ 
    mkdir($thumbs,0777); 
    $thumbnailfolder = $thumbs ; 
    //echo $thumbs.'<br>'; 
}else{ 
    $thumbnailfolder = $thumbs ; 
    //echo $thumbnailfolder.'<br>'; 

} 

$allowedfiletypes = array("jpeg","jpg"); 
//$uploadfolder = $s; 
$thumbnailheight = 100; //in pixels 
$imagesresizeheight = 500; 

$action = $_POST['action']; 
if ($action == "upload") { 
    //$_SESSION['result'] = "Uploading image... " ; 

    if(empty($_FILES['uploadimage']['name'])){ 
     $_SESSION['result'] = "<strong>Error: File not uploaded 1!</strong><br>" ; 
    } else { 
      $uploadfilename = $_FILES['uploadimage']['name']; 
     $fileext = strtolower(substr($uploadfilename,strrpos($uploadfilename,".")+1)); 
     if (!in_array($fileext,$allowedfiletypes)) { $_SESSION['result'] = "<strong>Error: Invalid file extension!</strong><br>" ; } 
     else { 

      $fulluploadfilename = $uploadfolder.$uploadfilename ; 
      if (move_uploaded_file($_FILES['uploadimage']['tmp_name'], $fulluploadfilename)) { 
       $im = imagecreatefromjpeg($fulluploadfilename); 
       if (!$im) { $_SESSION['result'] = "<p><strong>Error: Couldn't Resize Image!</strong><br>" ; } 
       else { 

        //// Resize Image Creation ////// 
        $imw = imagesx($im); // uploaded image width 
        $imh = imagesy($im); // uploaded image height 
        $nh = $imagesresizeheight; // thumbnail height 
        $nw = round(($nh/$imh) * $imw); //thumnail width 
        $newim = imagecreatetruecolor ($nw, $nh); 
        imagecopyresampled ($newim,$im, 0, 0, 0, 0, $nw, $nh, $imw, $imh) ; 
        $imagefilename = $uploadfolder.$uploadfilename ; 
        imagejpeg($newim, $imagefilename) or die($_SESSION['result'] ="<strong>Error: Couldn't save image resize!</strong><br>"); 
        echo $imw. $imh. $nw. $imagefilename;  

        //// Thumbnail Creation ////// 
        $imw = imagesx($im); // uploaded image width 
        $imh = imagesy($im); // uploaded image height 
        $nh = $thumbnailheight; // thumbnail height 
        $nw = round(($nh/$imh) * $imw); //thumnail width 
        $newim = imagecreatetruecolor ($nw, $nh); 
        imagecopyresampled ($newim,$im, 0, 0, 0, 0, $nw, $nh, $imw, $imh) ; 
        $thumbfilename = $thumbnailfolder.$uploadfilename ; 
        imagejpeg($newim, $thumbfilename) or die($_SESSION['result'] ="<strong>Error: Couldn't save thumnbail!</strong><br>"); 
        //echo $thumbfilename; 
        //$_SESSION['result'] ='<img src="'.$thumbfilename.'"/><br>' ; 
       } 
      } else { $_SESSION['result'] = "<strong>Error: Couldn't save file($fulluploadfilename)!</strong><br>"; 
      } 
     } 
    } 
} 
//unlink($fulluploadfilename);   
      //////////////////////////////////////////////// 
//connect to mysql server 
    $c = mysql_connect(DB_SERVER, DB_USERNAME, DB_PASSWORD, DB); 
    if (!$c){ 
     $_SESSION['result'] .= mysql_error().'<br>'; 
     return; 
    } 


    if (!mysql_select_db(DB)){ 
     $_SESSION['result'] .= mysql_error().'<br>'; 
     mysql_close($c); 
     return; 
    } 

    //5. insert settings 
    $sql = "INSERT INTO photo(photo_id,photo_filename) VALUES ('".$_SESSION['info_id']."','".$uploadfilename."')"; 


    if (!mysql_query($sql,$c)){ 
      mysql_close($c); 
      return; 
    } 
    mysql_close($c); 
////////////////////////////////////////////// 
//$ref = getenv("HTTP_REFERER"); 
//header("Location: ".$ref); 

?> 
+1

В чем ваш вопрос? Что делает ваш код и в каком отношении он ведет себя по-другому, что вы ожидали? – Hulk

+0

Мой код загружает изображение, затем создает миниатюру этого изображения, затем сохраняет основное изображение в одном файле и миниатюру в файле с большими пальцами ... Мне нужно изменить размер основного изображения с ширины 4032 до 1024 ... –

+0

хорошо, вы уже знаете, как это сделать - это то же самое, что и создание миниатюры (почти, на этот раз вы знаете ширину цели вместо высоты). Вместо того, чтобы просто хранить оригинал, вы можете сохранить вторую версию с пониженной дискретизацией (которая может быть названа как оригинал, хотя я бы не рекомендовал этого). – Hulk

ответ

0

просто

unlink($fulluploadfilename); 

после всех миниатюр созданы.

+0

Что удалит мое изображение? Я не хочу этого делать. –

+0

, чтобы сохранить оригиналы? Понимаю. Об огромных изображениях: 4320 * 3240 * 32/* true color */= 427Mb –

+0

Можете ли вы просто увеличить ограничение памяти до 1024 М? –

Смежные вопросы