.
Место для Вашей рекламы
19 Июнь 2014

Получаем из прямоугольного изображения квадратное

posted in Полезности, Программирование |

При создании превью картинок заданного (в моём случае квадратного) размера сталкиваемся с проблемой изменения размеров изображения без искажения самого изображения.

Например есть картинка — карандаш. ширина 100 высота 1000
нужно сделать квадратную превью картинку 100х100

если просто уменьшить с сохранением пропорций получаем 10х100
как бы нарастить по бокам для получения квадратной картинки (карандаш должен быть в центре)?

либо наоборот — тот же карандаш но горизонтально расположен
ширина 1000 высота 100

превью картинка так же должна получиться 100х100 — с полями сверху и снизу

Обычный ресайз с сохранением геометрии — сплошь и рядом.
НО до его применения нужно отквадратить искомое изображение!
В случае с карандашем — сделать 1000х1000 а потом уже уменьшить до 100

Собственно, ниже фукнция уквадрачивания 🙂

function image_resize($src, $dst){
if(!list($w, $h) = getimagesize($src)) return "Unsupported picture type!";
$type = strtolower(substr(strrchr($src,"."),1));
if($type == 'jpeg') $type = 'jpg';
switch($type){
case 'bmp': $img = imagecreatefromwbmp($src); break;
case 'gif': $img = imagecreatefromgif($src); break;
case 'jpg': $img = imagecreatefromjpeg($src); break;
case 'png': $img = imagecreatefrompng($src); break;
default : return "Unsupported picture type!";
}
$x = $y = 0;
if($w < $h) { $x = $h/2 - $w/2; $new = imagecreatetruecolor($h, $h); } else { $y = $w/2 - $h/2; $new = imagecreatetruecolor($w, $w); } $color = imagecolorallocate($new, 255, 255, 255); imagefill($new, 0, 0, $color); imagecopyresampled($new, $img, $x, $y, 0, 0, $w, $h, $w, $h); switch($type){ case 'bmp': imagewbmp($new, $dst); break; case 'gif': imagegif($new, $dst); break; case 'jpg': imagejpeg($new, $dst); break; case 'png': imagepng($new, $dst); break; } return true; }

У нас 2 комментария на запись “Получаем из прямоугольного изображения квадратное”

Почему бы Вам не высказать своем мнение! Позвольте нам узнать, что Вы думаете...

  1. 1 On 21.03.2016, Nikolay said:

    Подскажите, а где этот код запускать надо?

  2. 2 On 30.09.2016, Михаил said:

    То, что нужно! спасибо автору!

Оставить комментарий

Яндекс.Метрика