|
|
|
| Привет всем))
Нашел функцию которая режит картинку. Указываешь процент от изночального размера и он режит ихображение и сохраняет результат.
Проблема в том что мне нужно, принудительно резать изображение например указываем 250 на 200 функция проверяет имет ли изображение данный размер и режит если это возможно не растягивая изображение а просто вырезает с середины 250 на 200 px.
вот пример было:
ххххххх
ххххххх
ххх0ххх
ххххххх
ххххххх
а стало:
ххххх
хх0хх
ххххх
<?php
/** Универсальный ресайз картинок
*
* Функция позволяет копировать изображение,
* оставляя его исходные характеристики или
* изменяя его размер и/или качество.
* При изменении размера сохраняются пропорции.
*
* Функция умеет работать с изображениями
* следующих форматов: JPG, PNG, GIF.
*
* Параметры:
* @ $from - путь к изображению, над которым будут выполняться операции
* @ $to - путь к результирующему изображению
* @ $maxwidth - максимальная ширина изображения
* @ $maxheight - максимальная высота изображения
* @ $quality - качество картинки (0..100) (для JPG и PNG)
*
* Возвращаемые значения:
* false - во время выполнения произошла ошибка
* true - функция выполнилась успешно и без ошибок
*
* Автор:
* @name Валерий 'Figaroo' Киркиж
* @url http://figaroo.ru/
* @email mail@figaroo.ru
*/
function figaroo_resize_image ($from, $to, $maxwidth, $maxheight, $quality = 80) {
// защита от Null-байт уязвимости PHP
$from = preg_replace('/\0/uis', '', $from);
$to = preg_replace('/\0/uis', '', $to);
// информация об изображении
$imageinfo = @getimagesize($from);
// если получить информацию не удалось - ошибка
if (!$imageinfo) return false;
// получаем параметры изображения
$width = $imageinfo[0]; // ширина
$height = $imageinfo[1]; // высота
$format = $imageinfo[2]; // ID формата (число)
$mime = $imageinfo['mime']; // mime-тип
// определяем формат и создаём изображения
switch ($format) {
case 2: $img = imagecreatefromjpeg($from); break; // jpg
case 3: $img = imagecreatefrompng($from); break; // png
case 1: $img = imagecreatefromgif($from); break; // gif
default: return false; break;
}
// если создать изображение не удалось - ошибка
if (!$img) return false;
// меняем размеры изображения
$newwidth = $newheight = 0;
// требуется квадратная картинка
if ($maxwidth == $maxheight) {
// размеры картинки больше по X и по Y
if ($width > $maxwidth && $height > $maxheight) {
// пропорции картинки одинаковы
if ($width == $height) {
$newwidth = $maxwidth;
$newheight = $maxheight;
}
// ширина больше
elseif ($width > $height) {
$newwidth = $maxwidth;
$newheight = intval(((float)$newwidth / (float)$width) * $height);
}
// высота больше
else {
$newheight = $maxheight;
$newwidth = intval(((float)$newheight / (float)$height) * $width);
}
}
// размеры картинки больше только по X
elseif ($width > $maxwidth) {
$newwidth = $maxwidth;
$newheight = intval(((float)$newwidth / (float)$width) * $height);
}
// размеры картинки больше только по Y
elseif ($height > $maxheight) {
$newheight = $maxheight;
$newwidth = intval(((float)$newheight / (float)$height) * $width);
}
// в остальных случаях ничего менять не надо
else {
$newwidth = $width;
$newheight = $height;
}
}
// требуется горизонтальная картинка
elseif ($maxwidth > $maxheight) {
// размеры картинки больше по X и по Y
if ($width > $maxwidth && $height > $maxheight) {
// ширина больше
if ($width > $height) {
$newwidth = $maxwidth;
$newheight = intval(((float)$newwidth / (float)$width) * $height);
}
// высота больше или равна ширине
else {
$newheight = $maxheight;
$newwidth = intval(((float)$newheight / (float)$height) * $width);
}
}
// размеры картинки больше только по X
elseif ($width > $maxwidth) {
$newwidth = $maxwidth;
$newheight = intval(((float)$newwidth / (float)$width) * $height);
}
// размеры картинки больше только по Y
elseif ($height > $maxheight) {
$newheight = $maxheight;
$newwidth = intval(((float)$newheight / (float)$height) * $width);
}
// в остальных случаях ничего менять не надо
else {
$newwidth = $width;
$newheight = $height;
}
}
// требуется вертикальная картинка
elseif ($maxwidth < $maxheight) {
// размеры картинки больше по X и по Y
if ($width > $maxwidth && $height > $maxheight) {
// ширина больше или равна высоте
if ($width >= $height) {
$newwidth = $maxwidth;
$newheight = intval(((float)$newwidth / (float)$width) * $height);
}
// высота больше
else {
$newheight = $maxheight;
$newwidth = intval(((float)$newheight / (float)$height) * $width);
}
}
// размеры картинки больше только по X
elseif ($width > $maxwidth) {
$newwidth = $maxwidth;
$newheight = intval(((float)$newwidth / (float)$width) * $height);
}
// размеры картинки больше только по Y
elseif ($height > $maxheight) {
$newheight = $maxheight;
$newwidth = intval(((float)$newheight / (float)$height) * $width);
}
// в остальных случаях ничего менять не надо
else {
$newwidth = $width;
$newheight = $height;
}
}
// если изменений над картинкой производить не надо - просто копируем её
if ($newwidth == $width && $newheight == $height && $quality == 80) {
if (copy($from, $to)) return true;
else return false;
}
// создаём новое изображение
$new = imagecreatetruecolor($newwidth, $newheight);
$black = imagecolorallocate($new, 0, 0, 0);
$white = imagecolorallocate($new, 255, 255, 255);
// копируем старое в новое с учётом новых размеров
imagefilledrectangle($new, 0, 0, $newwidth - 1, $newheight - 1, $white);
//imagecolortransparent($new, $white);
imagecopyresampled($new, $img, 0, 0, 0, 0, $newwidth, $newheight, $width, $height);
// создаём файл с новым изображением
switch ($format) {
case 2: // jpg
if ($quality < 0) $quality = 0;
if ($quality > 100) $quality = 100;
imagejpeg($new, $to, $quality);
break;
case 3: // png
$quality = intval($quality * 9 / 100);
if ($quality < 0) $quality = 0;
if ($quality > 9) $quality = 9;
imagepng($new, $to, $quality);
break;
case 1: // gif
imagegif($new, $to);
break;
}
return true;
}
?>
|
Заранее спасибо ОГРОМНОЕ.. | |
|
|
|
|
|
|
|
для: AlexDIXI
(13.08.2009 в 19:18)
| | imagecopy()
какое отношение к проблеме имеет этот код?
Не считая того, что и там и здесь про картинки? | |
|
|
|
|
|
|
|
для: Trianon
(13.08.2009 в 19:21)
| | прошу помочь пеерписать данную функцию под мой вариант задачи )) Или выложите свою )) | |
|
|
|
|
|
|
|
для: AlexDIXI
(13.08.2009 в 19:51)
| | Вам нужно именно "Помогите!" или "Сделайте это для меня за спасибо!"? | |
|
|
|
|
|
|
|
для: Саня
(13.08.2009 в 20:33)
| | Помогите - если можете, пожалуйста.. | |
|
|
|