Изменить размер изображения перед загрузкой PHP - PullRequest
3 голосов
/ 24 сентября 2010

Я не знаю, как изменить размер изображения в 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 запускается два раза, поскольку вы можете загрузить два изображения.1010 *

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

Ответы [ 2 ]

12 голосов
/ 24 сентября 2010

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

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

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

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); 
1 голос
/ 24 сентября 2010

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...