abler98
@abler98
Software Engineer

Как сделать квадратное превью изображения на PHP?

Нужно сделать как сдесь с автарами, например, я загружаю изображение размером 500x250, а получаю 256x256 (или любой другой размер, например, 64x64)
Оригинальное изображение
34da93fc716a4b4eaa7a500be9486135.jpg
И вот что получаем
cfdbc94200514829aed69620f7897a69.jpg

UPD.
Если у изображения высота больше ширины - длина квадрата равна ширине, а если ширина больше - длина равна высоте, ну а потом все это дело увеличить или уменьшить до нужных размеров.
  • Вопрос задан
  • 4291 просмотр
Решения вопроса 2
pi314
@pi314
Президент Солнечной системы и окрестностей
Например, воспользоваться imagecopyresampled().

Для предварительного определения размеров оригинала (и дальнейшего нахождения максимальной квадратной области) можно воспользоваться getimagesize().

Всех делов кругом бегом - 10~15 строк кода :)
Ответ написан
65536
@65536
public function resize($w, $h)
{
    if ( isset($this->source) )
    {
        $set_width = $width = imagesx($this->source);
        $set_height = $height = imagesy($this->source);

        if ( $h > $height )
            $h = $height;

        if ( $w > $width )
            $w = $width;

        if ( $w > 0 && $h > 0 )
        {
            if ( $width / $height > $w / $h )
                $h = 0;
            else
                $w = 0;
        }

        if ( $w > 0 )
        {
            $set_width = $w;
            $set_height = $height * $w / $width;
        }

        if ( $h > 0 )
        {
            $set_height = $h;
            $set_width = $width * $h / $height;
        }

        $tmp = imagecreatetruecolor($set_width, $set_height);
        imagealphablending($tmp, false);
        imagesavealpha($tmp, true);
        imagecopyresampled($tmp, $this->source, 0, 0, 0, 0, $set_width, $set_height, $width, $height);

        return $tmp;
    }
}


где $this->source это ид ресурса картинки, созданного, например, так

$this->source = imagecreatefromjpeg($image_file_path);


если передана только $w, картинка на выходе будет подогнана по ширине, заданной $w. то же самое если только $h передана ($w при этом = 0), будет подогнана по высоте. Если заданы и $w и $h, то картинка будет вписана в прямоугольник $w*$h. во всех случаях пропорции сохраняются

правда в вашем вопросе не уменьшение, а вырезание нарисовано
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы