Задать вопрос
abler98
@abler98
Software Engineer

Пытаюсь сделать превью для изображения. Можете помочь?

Вот что получилось, но я думаю, что можно как-то короче и быстрее это сделать. Если что, я хочу сделать квадратную уменьшенную копию изображения
<?php

# Необходимая длина квадрата
$required_size = 64;
# Пути к исходному изображения
$src = 'root.jpg';

# Размеры исходного изображения
list($width, $height) = getimagesize($src);
# Определяем длину
$size = $width > $height ? $height : $width;
# Исходное изображение
$source = imagecreatefromjpeg($src);
# Пустое изображение с черным фоном
$image = imagecreatetruecolor($required_size, $required_size);
# Начальная точки для обрезки
$x = $width > $height ? (($width - $size) / 2) : 0;
$y = $height > $width ? (($height - $size) / 2) : 0;
# Обрезаем изображение
$crop = imagecrop($source, array('x' => $x, 'y' => $y, 'width' => $size, 'height' => $size));
# Уменьшаем до нужных размеров
imagecopyresampled($image, $crop, 0, 0, 0, 0, $required_size, $required_size, $size, $size);

# Указываем заголовок
header('Content-Type: image/png');
# Выводим изображение
imagepng($image);
# Очищаем память
imagedestroy($source);
imagedestroy($image);
imagedestroy($crop);


UPD.
Я еще не проверял с квадратным изображением, наверное нужно доработать.
  • Вопрос задан
  • 2527 просмотров
Подписаться 2 Оценить Комментировать
Решение пользователя Sergej К ответам на вопрос (3)
sayber
@sayber Куратор тега PHP
Да, я программирую на PHP и еще асинхронно!
А зачем так извращаться? Используйте imagick

Как работать с imagick

Ну и хабр конечно.
habrahabr.ru/post/43511

Маленький пример
// $target  path (полный путь до файла)
$t = new \Imagick($target);
// нужный размер
$t->ThumbnailImage(90, 90, true);
// Формат
$t->setFormat("jpg");

$t->writeImage("Куда сохранить /var/www/domen.tdl/public...");
Ответ написан