Изменить размер скопированного изображения при загрузке в качестве эскиза

Я работаю над загрузчиком и постепенно заставляю его работать, я загружаю 3 изображения одновременно и устанавливаю массивы для каждого в качестве ключей с приращением ++ 1. Я хочу изменить размер изображения, прежде чем оно будет скопировано в папку с миниатюрами.

У меня есть этот код.

Все работает с этим.
Как вы видите, я начал получать информацию о файле, но после этого я полностью застрял в том, что делать после того, как изменить размер изображения пропорционально с максимальной шириной Иксpx и высота, чтобы соответствовать этому, не выглядя искаженным.

Любая помощь могла бы быть полезна. Благодарю вас.

РЕДАКТИРОВАТЬ — Я начал работать над этим сам и интересно, если это правильный подход к тому, что я делаю.

<?php
if (isset($_POST['addpart'])) {

$image = $_FILES['images']['tmp_name'];
$name  = $_POST['username'];
$i     = 0;
foreach ($image as $key) {

$fileData   = pathinfo(basename($_FILES["images"]["name"][$i]));
$fileName[] = $name . '_' . uniqid() . '.' . $fileData['extension'];
move_uploaded_file($key, "image/" . end($fileName));
copy("image/" . end($fileName), "image_thumbnail/" . end($fileName));// START -- THE RESIZER THAT IS BEING WORKED ON
$source  = "image_thumb/" . end($fileName);
$dest    = "image_thumb/" . end($fileName);
$quality = 100;
$scale   = 1 / 2;

$imsize = getimagesize($source);
$x      = $scale * $imsize[0];
$y      = $scale * $imsize[1];

$im    = imagecreatefromjpeg($source);
$newim = imagecreatetruecolor($x, $y);
imagecopyresampled($newim, $im, 0, 0, 0, 0, $x, $y, $imsize[0], $imsize[1]);
imagejpeg($newim, $dest, $quality);
// END -- THE RESIZER THAT IS BEING WORKED ON
$i++;
}
echo 'Uploaded<br>';
echo 'Main Image - ' . $fileName[0] . '<br>';
echo 'Extra Image 1 - ' . $fileName[1] . '<br>';
echo 'Extra Image 2 - ' . $fileName[2] . '<br>';
echo '<hr>';

}
?>

Спасибо

0

Решение

использование Библиотека GD.

  1. Создать входной объект изображения с помощью imagecreatefromstring () например: imagecreatefromstring(file_get_contents($_FILES['images']['tmp_name'][$i]))

    Это самый простой способ.

    Другой вариант — определить тип файла и использовать такие функции, как imagecreatefromjpeg (), imagecreatefrompng(), так далее.

  2. Создать выходное пустое изображение, используя ImageCreate ()
  3. использование imagecopyresampled () или же imagecopyresized () изменить размер изображения и скопировать + вставить его из входного изображения в выходное изображение
  4. Сохранить выходное изображение с помощью функции, как imagejpeg ()
  5. Очистить память с помощью ImageDestroy ()
1

Другие решения

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

Если вы используете Вмешательство / изображение, например, ваш код будет выглядеть так:

<?php
// target file to manipulate
$filename = $_FILES['images']['tmp_name'];

// create image instance
$img = Image::make($filename);

// resize to width, height
$img->resize(320, 240);

// save it!
$img->save('thumbs/'. uniqid() . '.' . pathinfo($filename, PATHINFO_EXTENSION));

Прочитайте полную документацию здесь: http://image.intervention.io/use/uploads

0

По вопросам рекламы [email protected]