[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: что лучше в обработке изображений
glivera
Написан простенький скрипт по обработке картинок. Суть - изменить размер, отрезать лишнее, налепить водяной знай и сделать еще пару ресайзов чтобы получить среднее и маленькое изображение.

Все гуд, кроме одного. Если на вход отправить картинку разрешение которой больше чем 1200 пикселей по одной из ширине, то случается бедапечаль. Изображение не обрабатывается. Может кто подсказать куда копать?

Ограничение типа "Не загружайте картинки больше 1200 пикселей" для пользователей не подойдет, там люди бывают не совсем подкованные технически, что загрузить изображение для них уже событие)

Одна из функций (остальные работают с результатом полученным тут):

function prepare_image($filename_src, $filename_dst, $filename_watermark, $w, $h)
{
// Открываем исходное изображение
// Считаем, что картинка всегда JPEG, иначе, нужно добавить проверку по расширению

$imgsource = imagecreatefromjpeg($filename_src);

// Получаем ширину и высоту исходного изображения
$src_w = imagesx($imgsource);
$src_h = imagesy($imgsource);


// Высчитываем коэффициенты отношения исходных размеров к заданным
IF($w > 0) {$dx = $src_w / $w;} else {$dx = 0;}
IF($h > 0) {$dy = $src_h / $h;} else {$dy = 0;}

// Выбираем наибольший коэффициент
$d = max($dx, $dy);

// Получаем высоту и ширину результирующего изображения
$new_w = $src_w / $d;
$new_h = $src_h / $d;
$water_heu = $new_h - 95;
$water_w = 15;

// Создаем новое изображение, которое и будет нашим результатом
$imgdest = imagecreatetruecolor($new_w, $new_h);

// Копируем изображение-источник в изображение-результат уменьшая его
imagecopyresampled($imgdest, $imgsource, 0, 0, 0, 0, $new_w, $new_h, $src_w, $src_h);

// Накладываем ватермарк или логотип
// Считаем, что картинка всегда PNG, иначе, нужно добавить проверку по расширению


$filename_watermark = $_SERVER['DOCUMENT_ROOT']."/cms_images/kopy.png";

$imgadd = imagecreatefrompng($filename_watermark);

imagecopy($imgdest, $imgadd, $water_w, $water_heu, 0, 0, imagesx($imgadd), imagesy($imgadd));

// Сохраняем результат
imagejpeg($imgdest, $filename_dst, 100);

// Чистим мусор
imagedestroy($imgadd);
imagedestroy($imgdest);
imagedestroy($imgsource);
}
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.