Здравствуйте как можно получить вот такой результат с помощью php при загрузки изображение на сервер. Чтобы загружаемые изображения сохранились с одинаковыми размерами (thumb) при этом не сжимались
Используйте библиотеку Imagick, метод Imagick::cropImage. Он делает как раз то, что вам нужно.
Делается на обычном php (да, да, это говнокод, функциональщина, но может хватит уже либы везде и всюду пихать? давайте сначала основы учить):
function resize($image, $out, $w_o = false, $h_o = false) {
// Размеры выходного изображения
$outWidth = 120;
$outHeight = 120;
if (($w_o < 0) || ($h_o < 0)) {
echo "Некорректные входные параметры";
return false;
}
list($w_i, $h_i, $type) = getimagesize($image); // Получаем размеры и тип изображения (число)
$types = array("", "gif", "jpeg", "png"); // Массив с типами изображений
$ext = $types[$type]; // Зная "числовой" тип изображения, узнаём название типа
if ($ext) {
$func = 'imagecreatefrom'.$ext; // Получаем название функции, соответствующую типу, для создания изображения
$img_i = $func($image); // Создаём дескриптор для работы с исходным изображением
} else {
echo 'Некорректное изображение'; // Выводим ошибку, если формат изображения недопустимый
return false;
}
/* Если указать только 1 параметр, то второй подстроится пропорционально */
if (!$h_o) $h_o = $w_o / ($w_i / $h_i);
if (!$w_o) $w_o = $h_o / ($h_i / $w_i);
/* Задаем смещение, центрируя изображение */
$marge_right = abs($outWidth - $w_o)/2;
$marge_bottom = abs($outHeight - $h_o)/2;
$img_o = imagecreatetruecolor($outWidth,$outHeight); // Создаём дескриптор для выходного изображения
imagefill($img_o,0,0,imagecolorallocate($img_o, 255, 255, 255));
imagecopyresampled($img_o, $img_i, $marge_right, $marge_bottom, 0, 0, $w_o, $h_o, $w_i, $h_i); // Переносим изображение из исходного в выходное, масштабируя его
return imagejpeg($img_o,$out,100); // Сохраняем изображение в тот же файл, что и исходное, возвращая результат этой операции
}
$rootPath=$_SERVER["DOCUMENT_ROOT"];
// Код ниже лучше использовать в цикле
$path=$rootPath."/in/".$inImage; // Изображение донор
$realImage=$rootPath."/out/".$outImage; //Выходное изображение
if(!is_file($realImage)){
if(is_file($path)){
list($width,$height)=getimagesize($path);
if($height>$width){
resize($path,$realImage,false,110);
}else{
resize($path,$realImage,110);
}
}
}
Магические число 120 выносим за функцию, естественно, и передаем в качестве аргумента. Магическое число 110 - это высота изображения, которое будет вставлено по центру 120-пиксельной конечной картинки.
P.S. Признаюсь честно, пробовал только на квадратных миниатюрах, т.е. 120х120, а внутри уже вертикальные картинки по 110, либо по ширине, либо по высоте.
P.S.S. Поставили минус - отпишитесь за что.
private function minimilize($savefile){
$image=new Gmagick($savefile);
$width=$image->getimagewidth();
$height=$image->getimageheight();
$standartWidth='';
$standartHeight='';
$x='';
$y='';
if($width>$height) {
$standartWidth=1024;
$standartHeight=756;
$masWidth=1300;
$masHeight=900;
$kw=$width/$masWidth;
$wx=$width/$kw;
$image->setCompressionQuality(80);
$image->profileimage('*',null);
$image->resizeimage($wx, $wx, null, 1, true);
$x = (($masWidth - $standartWidth) / 2);
$y = 0;
}
if($width<$height) {
$standartWidth=1024;
$standartHeight=756;
$koef=$width/1024;
$wx=$height/$koef;
$image->setCompressionQuality(80);
$image->profileimage('*',null);
$image->resizeimage($wx, $wx, null, 1, true);
$x = 0;
$y = $wx/7.75;
}
$image->cropimage($standartWidth, $standartHeight, $x,$y);
$image->writeimage($savefile);
$image->destroy();
}
вот другое решение
еще раз
как установить GM
Оборудование для ресторана: новинки профессиональной кухонной техники
Частный дом престарелых в Киеве: комфорт, забота и профессиональный уход
У меня есть api , который принимает POST запрос, в теле цифры, и если цифры совпадают, возвращает сгенерированный urlСейчас мне надо написать php скрипт,...
Есть необходимость сделать на сайте вывод информации о работе залаВ разное время проводятся разные занятия для разных групп
Интересует такой вопрос, как прикрепить документ как граффити без всяких программ, но возможно с API на PHP или другим способом?
Есть Yii2 advanced приложениеМне надо сохранить файл из бэкэнда на фронт так что бы он был доступен из обоих приложений