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

0

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

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

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

Любая помощь могла бы быть полезна. Спасибо.

EDIT --- Я начал работать над этим сам и задаюсь вопросом, правильно ли это подход к тому, что я делаю.

<?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>';

}
?>

благодаря

Теги:
resize
upload

2 ответа

1
Лучший ответ

Используйте библиотеку GD.

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

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

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

  2. Создание выходного пустого изображения с помощью imagecreate()
  3. Используйте imagecopyresampled() или imagecopyresized(), чтобы изменить размер изображения и скопировать + вставить его из входного изображения в выходное изображение
  4. Сохранить выходное изображение с помощью функции imagejpeg()
  5. Чистая память с помощью imagedestroy()
  • 1
    @PeterSmith Можете ли вы направить меня через это, как я строю это понемногу
0

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

Например, если вы используете Intervention/image, ваш код будет выглядеть так:

<?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

  • 1
    Большое вам спасибо за это, я закончил мой код, и он масштабирует изображение на основе заданной ширины.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню