Загрузите изображение, создайте его миниатюру и сохраните

Допустим, я загрузил изображение. Я могу получить его временный каталог, а затем сохранить его с помощью move_uploaded_file(), но что, если я хочу также создать превью и сохранить оба в какой-то папке?

Я знаю, как сохранить загруженное изображение, но я не знаю, как начать манипулировать изображением и сохранить его после создания большого пальца.


person Rodrigo Souza    schedule 19.07.2010    source источник
comment
Вам не нужно помещать «[PHP]» в заголовок, для этого нужны теги.   -  person Wrikken    schedule 20.07.2010


Ответы (4)


Я всегда использую класс Verot PHP Upload и всегда добивался успеха. Этот PHP-класс действительно прост в реализации и может манипулировать изображением любым удобным для вас способом. Он может сохранить изображение также в указанной папке.

Вы можете загрузить его с здесь

Чтобы просмотреть демонстрации и простую документацию по классу Upload, посетите http://www.verot.net/php_class_upload_samples.htm?PHPSESSID=5375147e959625e56e0127f3458a6385

Ниже приведен простой образец, который я получил с веб-сайта.

//How to use it?
//Create a simple HTML file, with a form such as:

 <form enctype="multipart/form-data" method="post" action="upload.php">
   <input type="file" size="32" name="image_field" value="">
   <input type="submit" name="Submit" value="upload">
 </form>

//Create a file called upload.php:

  $handle = new upload($_FILES['image_field']);
  if ($handle->uploaded) {
      $handle->file_new_name_body   = 'image_resized';
      $handle->image_resize         = true;
      $handle->image_x              = 100;
      $handle->image_ratio_y        = true;
      $handle->process('/home/user/files/');
      if ($handle->processed) {
          echo 'image resized';
          $handle->clean();
      } else {
          echo 'error : ' . $handle->error;
      }
  }

//How to process local files?
//Use the class as following, the rest being the same as above:

  $handle = new upload('/home/user/myfile.jpg');
person Elitmiar    schedule 19.07.2010

Библиотека GD делает это супер-простым.

Вы захотите рассчитать размеры исходного изображения, чтобы сохранить соотношение сторон, тогда это просто случай повторной выборки изображения в меньшем размере. Вот хороший учебник, который все четко объясняет: http://www.phptoys.com/e107_plugins/content/content.php?content.46

person hollsk    schedule 19.07.2010

вам нужен либо php gd, либо imagemagick. вот быстрый пример изменения размера с помощью gd (из руководства):

<?php
// File and new size
$filename = 'test.jpg';
$percent = 0.5;

// Content type
header('Content-type: image/jpeg');

// Get new sizes
list($width, $height) = getimagesize($filename);
$newwidth = $width * $percent;
$newheight = $height * $percent;

// Load
$thumb = imagecreatetruecolor($newwidth, $newheight);
$source = imagecreatefromjpeg($filename);

// Resize
imagecopyresized($thumb, $source, 0, 0, 0, 0, $newwidth, $newheight, $width, $height);

// Output
imagejpeg($thumb, 'thumbs/thumb1.jpg');
?>
person Sergey Eremin    schedule 19.07.2010
comment
Как сохранить изображение в какой-нибудь папке, а не отображать его? - person Rodrigo Souza; 20.07.2010
comment
второй параметр функции imagejpeg — это имя файла. я обновил пример. также проверьте справочную страницу: php.net/manual/en/function.imagejpeg. php - person Sergey Eremin; 20.07.2010

Используйте магию изображения. проверьте предыдущие сообщения о переполнении стека > PHP: создание обрезанных миниатюр изображений, проблемы Класс обработки изображений в PHP http://www.imagemagick.org/

define('THUMB_WIDTH', 60);
define('THUMB_HEIGHT', 80);
define('MAGICK_PATH','/usr/local/bin/');

function makeThumbnail($in, $out) {
    $width = THUMB_WIDTH;
    $height = THUMB_HEIGHT;
    list($w,$h) = getimagesize($in);

    $thumbRatio = $width/$height;
    $inRatio = $w/$h;
    $isLandscape = $inRatio > $thumbRatio;

    $size = ($isLandscape ? '1000x'.$height : $width.'x1000');
    $xoff = ($isLandscape ? floor((($inRatio*$height)-$width)/2) : 0);
    $command = MAGICK_PATH."convert $in -resize $size -crop {$width}x{$height}+{$xoff}+0 ".
        "-colorspace RGB -strip -quality 90 $out";

    exec($command);
}
person Developer    schedule 19.07.2010