Обрезка фотографий

Статус
В этой теме нельзя размещать новые ответы.

pixelranger

Постоялец
Регистрация
23 Июн 2006
Сообщения
381
Реакции
114
Нужно сделать фотке превью, сначала уменьшить, чтобы картинка не была меньше превью(по пропорциям), а потом обрезать лишнее. phpthumb не предлагать!
 
Не очень понятно, что Вам требуется сделать? Вам нужно создать уменьшенную копию фотографии?
 
Да, но чтобы вписалась в новые пропорции, а лишнее обрезалось.
 
Можно вписаться в новые пропорции и с сохранением исходного изображения, или Вам принципиально надо обрезать?
 
Ну если мы впишем(по ширине), то фотки, допустим по высоте будут разные...при условии что сохраняем пропорции, а если нет то все будет растянуто..надо как бы из центра вписывать в новые размеры после уменьшения и лишнее убирать.
 
Ну так для вертикальных и горизонтальных фотографий свои размеры, это логично, и они естественно будут отличаться, к примеру горизонтальная фотография имеет размеры (h100 w300), а должна стать -(h50 w150), вертикальная - (h300 w100) -> (р150 w50). Таким образом если мы масштабируем фотографию, сохраняя пропорции исходного изображения, ничего не нужно обрезать, и ничего не будет растянуто..
 
а мне надо так: (h100 w300), а должна стать -(h50 w50), понимаете о чем я?
 
1) Выбираешь по какой стороне будет пропорция(ширина либо высота). Допустим по ширине макс. 50 пикселей;
2) определяешь коэффициент пропорции: К = исходная ширина/50 пикселей;
3) Определяешь новую высоту по пропорции: Новая высота = Старая высота/K;
4) Получаешь новую уменьшенную картинку;
5) Обрезаешь новую уменьшенную картинку до 50*50 px.
 
Посмотрите класс, который называется мини фотошоп на php

здесь примеры любых обрезок с картинками, в.т.ч. и те, которые Вам нужны.
 
а мне надо так: (h100 w300), а должна стать -(h50 w50), понимаете о чем я?
Теперь понятно, ну для того чтобы получилось более менее качественно,
нужно будет сначала сделать ресайз, а потом обрезать получившуюся миниатюру до нужных Вам размеров.
Вот функция, которая будет сжимать изображение, сохраняя его пропорции:
PHP:
//$filename - путь к исходному файлу
//$smallimage - путь к уменьшенной копии
//$w - ширина уменьшенной фотографии
//$h - высота уменьшенной фотографии
function resizeimg($filename, $smallimage, $w, $h) 
  { 
    $ratio = $w / $h; 
    list($width, $height) = getimagesize($filename); 
    if (($width < $w) && ($height < $h))
    {
      copy($filename, $smallimage);
      return true; 
    }
    $src_ratio = $width/ $height; 
    if ($ratio < $src_ratio) $h = $w/$src_ratio; 
    else $w = $h*$src_ratio; 
    $dest_img = imagecreatetruecolor($w, $h);   
    $src_img = imagecreatefromjpeg($filename);                       
    imagecopyresampled($dest_img, $src_img, 0, 0, 0, 0, $w, $h, $width, $height);
    imagejpeg($dest_img, $smallimage);                       
    imagedestroy($dest_img); 
    imagedestroy($src_img); 
    return true;          
  }
Встроенной функции по обрезке фотографий в PHP нет. Можно воспользоваться либо imagecopy, либо писать свою.
Вот функция, которая позволит Вам обрезать фотографию, выбрав ее середину:
PHP:
// $fileresized - путь к уже уменьшенному файлу (миниатюре)
// $x1,$y1 - Верхняя левая точка, вырезаемого кусочка изображения
// $x2,$y2 - Нижняя правая точка, вырезаемого кусочка изображения
function ImageCut($fileresized,$x1,$y1,$x2,$y2){
   if(file_exists($fileresized)){
     $w=$x2-$x1;
     $h=$y2-$y1;
     //создадим пустое изображение по заданным размерам
     $dest_img=@imagecreatetruecolor($w,$h);
     $src_img=@imagecreatefromjpeg($fileresized);
     //Копируем
     @imagecopyresampled($dest_img,$src_img,0,0,$x1,$y1,$w,$h,$w,$h);
     //сохраняем уменьшенную копию в файл
     @imagejpeg($dest_img,"filename.jpg");
     //чистим память от созданных изображений
     @imagedestroy($dest_img);
     @imagedestroy($src_img);
     return true;
   }else{
     return false;
   }
 }
 //Вызываем функцию
 ImageCut("your-image.jpg",0,0,100,100);
PS
При желании можно обучить функцию работать не только с jpeg, каковой она сейчас является.
Как связать эти две функции, думаю разберетесь, будут вопросы, пишите.

Добавлено через 4 минуты
Посмотрите класс, который называется мини фотошоп на php
*** скрытое содержание ***
здесь примеры любых обрезок с картинками, в.т.ч. и те, которые Вам нужны.

Этот класс при обрезке не сохраняет пропорции, а автору нужно, чтобы пропорции сохранялись.
 
Статус
В этой теме нельзя размещать новые ответы.
Назад
Сверху