2010-09-24 10 views
3

Я понятия не имею, как изменить размер изображения в PHP, мой код:Изменение размера изображений перед загрузкой PHP

for ($index = 1; $index <= 2; $index++) { 

    if (!empty($_FILES["pic$index"]["name"])) { 
     $ext = substr($_FILES["pic$index"]["name"], strrpos($_FILES["pic$index"]["name"], '.') + 1); 
     $dir = "../gallery/$mkdir"; 

     HERE I NEED THE RESIZE OF THE TMP FILE OF IMAGE 

     move_uploaded_file($_FILES["pic$index"]["tmp_name"] , "$dir/img-$index.$ext"); 

    } 

} 

$ MkDir = имя папки галереи (есть много галерей).

$ dir = где будут размещены фотографии.

$ ext = тип изображения (png, gif или jpg).

цикл foreach работает два раза, потому что вы можете загрузить две фотографии.

Этот скрипт работает хорошо, мне просто нужно сделать размер, и я не имею понятия, как это сделать ..

+2

Обратите внимание, что вы не можете изменить размер изображения перед загрузкой - он нуждается в загрузке, так что PHP может изменить его размер. –

+0

Вы уверены? поэтому я должен загрузить его и изменить его размер и снова загрузить снова? – Luis

+0

Hey Luis, Могу ли я спросить ... почему бы не позволить загружать полный размер изображения и изменять размер изображения при отображении страницы? – d2burke

ответ

13

Вот код, я использую, чтобы изменить размер изображения.

В моем случае я передаю функции имя оригинального файла, а затем имя файла миниатюр.

Вы можете легко адаптировать его для своего случая.

public static function GenerateThumbnail($im_filename,$th_filename,$max_width,$max_height,$quality = 0.75) 
{ 
// The original image must exist 
if(is_file($im_filename)) 
{ 
    // Let's create the directory if needed 
    $th_path = dirname($th_filename); 
    if(!is_dir($th_path)) 
     mkdir($th_path, 0777, true); 
    // If the thumb does not aleady exists 
    if(!is_file($th_filename)) 
    { 
     // Get Image size info 
     list($width_orig, $height_orig, $image_type) = @getimagesize($im_filename); 
     if(!$width_orig) 
      return 2; 
     switch($image_type) 
     { 
      case 1: $src_im = @imagecreatefromgif($im_filename); break; 
      case 2: $src_im = @imagecreatefromjpeg($im_filename); break; 
      case 3: $src_im = @imagecreatefrompng($im_filename); break; 
     } 
     if(!$src_im) 
      return 3; 


     $aspect_ratio = (float) $height_orig/$width_orig; 

     $thumb_height = $max_height; 
     $thumb_width = round($thumb_height/$aspect_ratio); 
     if($thumb_width > $max_width) 
     { 
      $thumb_width = $max_width; 
      $thumb_height = round($thumb_width * $aspect_ratio); 
     } 

     $width = $thumb_width; 
     $height = $thumb_height; 

     $dst_img = @imagecreatetruecolor($width, $height); 
     if(!$dst_img) 
      return 4; 
     $success = @imagecopyresampled($dst_img,$src_im,0,0,0,0,$width,$height,$width_orig,$height_orig); 
     if(!$success) 
      return 4; 
     switch ($image_type) 
     { 
      case 1: $success = @imagegif($dst_img,$th_filename); break; 
      case 2: $success = @imagejpeg($dst_img,$th_filename,intval($quality*100)); break; 
      case 3: $success = @imagepng($dst_img,$th_filename,intval($quality*9)); break; 
     } 
     if(!$success) 
      return 4; 
    } 
    return 0; 
} 
return 1; 
} 

Коды возврата предназначены только для различения различных типов ошибок.

Оглядываясь назад на этот код, мне не нравится трюк «магического числа». Мне придется изменить это (например, исключениями).

if (!empty($_FILES["pic$index"]["name"])) { 
    $ext = substr($_FILES["pic$index"]["name"], strrpos($_FILES["pic$index"]["name"], '.') + 1); 
    $dir = "../gallery/$mkdir"; 
    // Move it 
    if(move_uploaded_file($_FILES["pic$index"]["tmp_name"] , "$dir/img-$index.$ext.tmp")) 
    { 
     // Resize it 
     GenerateThumbnail("$dir/img-$index.$ext.tmp","$dir/img-$index.$ext",600,800,0.80); 
     // Delete full size 
     unlink("$dir/img-$index.$ext.tmp"); 
    } 
} 

Используйте move_uploaded_file, чтобы переместить его (Рекоммендуемый), а затем вы можете изменить его и отправить его на это конечный пункт назначения. Возможно, вам даже не понадобится «.tmp», вы можете использовать.

// Move it 
    if(move_uploaded_file($_FILES["pic$index"]["tmp_name"] , "$dir/img-$index.$ext")) 
    // Resize it 
     GenerateThumbnail("$dir/img-$index.$ext","$dir/img-$index.$ext",600,800); 
+0

Что это за th_filename и im_filename? кроме того, я могу удалить часть «// Давайте создадим каталог, если потребуется ..» ?. – Luis

+0

Это имя файла изображения и имя файла миниатюр. «Делает этот образ, делаю миниатюру и сохраняю ее». Вы можете удалить часть каталога, если вы уверены, что она уже существует. –

+0

Вы уверены, что функция в порядке? вы не можете написать: if (! $ src_im) return 3; например. – Luis

1

Имейте в виду, что картина, которую вы имеете дело с уже загружены на сервер. Вы действительно хотите изменить размер изображения, прежде чем хранить его в «безопасном месте».

$_FILES["pic$index"]["tmp_name"] вероятно/TMP/somepicturesname

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