Автоматизируем уменьшение и обрезку изображений
Сегодня мы будем писать скрипт на PHP, который будет автоматически масштабировать и обрезать изображения.Зачем это нужно?
Допустим, у вас есть 100 изображений, которые нужно уменьшить до 300 пикселей в ширину. Или сжать до размеров аватара (100 на 100, например) и урезать до квадрата. Или уменьшить вдвое. Или произвести любую другую манипуляцию с масштабом и обрезкой...
Можете сразу скачать исходники:
Функция масштабирования
Первой мы рассмотрим функцию масштабирования.Код целиком:
<?php
function resize($file_input, $file_output, $w_o, $h_o, $percent = false) {
list($w_i, $h_i, $type) = getimagesize($file_input);
if (!$w_i || !$h_i) {
echo 'Невозможно получить длину и ширину изображения';
return;
}
$types = array('','gif','jpeg','png');
$ext = $types[$type];
if ($ext) {
$func = 'imagecreatefrom'.$ext;
$img = $func($file_input);
} else {
echo 'Некорректный формат файла';
return;
}
if ($percent) {
$w_o *= $w_i / 100;
$h_o *= $h_i / 100;
}
if (!$h_o) $h_o = $w_o/($w_i/$h_i);
if (!$w_o) $w_o = $h_o/($h_i/$w_i);
$img_o = imagecreatetruecolor($w_o, $h_o);
imagecopyresampled($img_o, $img, 0, 0, 0, 0, $w_o, $h_o, $w_i, $h_i);
if ($type == 2) {
return imagejpeg($img_o,$file_output,100);
} else {
$func = 'image'.$ext;
return $func($img_o,$file_output);
}
}
?>
Теперь разберём функцию по частям.Вызов функции:
resize($file_input, $file_output, $w_o, $h_o, $percent = false);где $file_input – исходный файл, $file_output – файл, в который мы будем сохранять готовое изображение, $w_o и $h_o – ширина и высота объекта соответственно, $percent – логическое выражение, определяющее, в чем измеряется длина – в пикселях (по умолчанию) или в процентах.
Получаем ширину, высоту и тип исходного изображения.
Если у нас это не получается, выводим сообщение об ошибке и выходим из функции.
list($w_i, $h_i, $type) = getimagesize($file_input);
if (!$w_i || !$h_i) {
echo 'Невозможно получить длину и ширину изображения';
return;
}
Тип мы получаем в формате числа: 1 – gif, 2 – jpeg, 3 – png.Нам же нужно представить его в виде строки.
Если тип файла подходит, то запускаем функцию под названием imagecreatefrom + разрешение файла (например, imagecreatefromjpeg) с параметром исходного файла, если же нет – опять выводим ошибку.
$types = array('','gif','jpeg','png');
$ext = $types[$type];
if ($ext) {
$func = 'imagecreatefrom'.$ext;
$img = $func($file_input);
} else {
echo 'Некорректный формат файла';
return;
}
Теперь переходим к размерам будущего файла. Переводим проценты в пиксели и определяем размер недостающей стороны (если необходимо).
if ($percent) {
$w_o *= $w_i / 100;
$h_o *= $h_i / 100;
}
if (!$h_o) $h_o = $w_o/($w_i/$h_i);
if (!$w_o) $w_o = $h_o/($h_i/$w_i);
Создаём новое изображение и вставляем в него уменьшенный исходный файл.Сохраняем во внешний файл.
Если сохраняем в jpeg, то дополнительно к первым двум параметрам указываем качество – число от 0 до 100, где 100 - максимально возможное качество.
Функция возвращает true, если запись в файл была выполнена успешно и false, если что-то пошло не так.
$img_o = imagecreatetruecolor($w_o, $h_o);
imagecopyresampled($img_o, $img, 0, 0, 0, 0, $w_o, $h_o, $w_i, $h_i);
if ($type == 2) {
return imagejpeg($img_o,$file_output,100);
} else {
$func = 'image'.$ext;
return $func($img_o,$file_output);
}
Функция обрезки
Теперь функция обрезки.
<?php
function crop($file_input, $file_output, $crop = 'square',$percent = false) {
list($w_i, $h_i, $type) = getimagesize($file_input);
if (!$w_i || !$h_i) {
echo 'Невозможно получить длину и ширину изображения';
return;
}
$types = array('','gif','jpeg','png');
$ext = $types[$type];
if ($ext) {
$func = 'imagecreatefrom'.$ext;
$img = $func($file_input);
} else {
echo 'Некорректный формат файла';
return;
}
if ($crop == 'square') {
$min = $w_i;
if ($w_i > $h_i) $min = $h_i;
$w_o = $h_o = $min;
} else {
list($x_o, $y_o, $w_o, $h_o) = $crop;
if ($percent) {
$w_o *= $w_i / 100;
$h_o *= $h_i / 100;
$x_o *= $w_i / 100;
$y_o *= $h_i / 100;
}
if ($w_o < 0) $w_o += $w_i;
$w_o -= $x_o;
if ($h_o < 0) $h_o += $h_i;
$h_o -= $y_o;
}
$img_o = imagecreatetruecolor($w_o, $h_o);
imagecopy($img_o, $img, 0, 0, $x_o, $y_o, $w_o, $h_o);
if ($type == 2) {
return imagejpeg($img_o,$file_output,100);
} else {
$func = 'image'.$ext;
return $func($img_o,$file_output);
}
}
?>
Рассмотрим вызов функции:
crop($file_input, $file_output, $crop = 'square',$percent = false);Параметры функции – исходный($file_input) и конечный($file_output) файл, переменная $crop, которая принимает координаты обрезки, а по умолчанию обрезает файл до квадрата, и, как и в первой функции, переменная $percent, которая принимает значение true или false.
Сначала пишем точно такой же код определения типа файла и его размеров, что и в первом случае. Надеюсь, объяснять его не потребуется.
list($w_i, $h_i, $type) = getimagesize($file_input);
if (!$w_i || !$h_i) {
echo 'Невозможно получить длину и ширину изображения';
return;
}
$types = array('','gif','jpeg','png');
$ext = $types[$type];
if ($ext) {
$func = 'imagecreatefrom'.$ext;
$img = $func($file_input);
} else {
echo 'Некорректный формат файла';
return;
}
Если координаты обрезки не заданы, то обрезаем изображение до формы квадрата. Как?Очень просто: находим наименьшую сторону исходного изображения, и присваиваем её ширине и длине конечного изображения.
if ($crop == 'square') {
$min = $w_i;
if ($w_i > $h_i) $min = $h_i;
$w_o = $h_o = $min;
} else {
/*...*/
}
Если же координаты существуют, то переносим их из массива в переменную и переводим проценты в пиксели (опять же, если это необходимо). Получаем длину и ширину обрезаемой поверхности.
list($x_o, $y_o, $w_o, $h_o) = $crop;
if ($percent) {
$w_o *= $w_i / 100;
$h_o *= $h_i / 100;
$x_o *= $w_i / 100;
$y_o *= $h_i / 100;
}
if ($w_o < 0) $w_o += $w_i;
$w_o -= $x_o;
if ($h_o < 0) $h_o += $h_i;
$h_o -= $y_o;
Теперь создаём новый файл, копируем кусок изображения по координатам, которые только что получили, и сохраняем этот кусок в файл.
$img_o = imagecreatetruecolor($w_o, $h_o);
imagecopy($img_o, $img, 0, 0, $x_o, $y_o, $w_o, $h_o);
if ($type == 2) {
return imagejpeg($img_o,$file_output,100);
} else {
$func = 'image'.$ext;
return $func($img_o,$file_output);
}
Вот и всё. Чтобы не быть голословной, вот решение тех задач, которые я поставила в начале:
Уменьшаем 100 изображений до 300 px в ширину:
$files = array_slice(scandir('photos/'),2); // получаем файлы из директории
foreach ($files as $file) {
resize($file, $file, 300, 0); // ширину не указываем – скрипт определит её сам
}
Уменьшение и обрезка аватара:
crop('big.jpg', 'crop.jpg');
resize('crop.jpg', 'avatar.jpg', 100, 100);

Уменьшаем изображение вдвое:
resize('big.jpg', 'small.jpg', 50, 50, true);

Плюс ещё парочка задач:
Обрезаем изображение на 10 пикселей с каждой стороны:
crop('big.jpg', 'frame.jpg', array(10, 10, -10, -10));

Делим изображение на 4 равные части:
crop('big.jpeg', '1.jpeg', array(0, 0, 50, 50),true);
crop('big.jpeg', '2.jpeg', array(50, 0, 100, 50),true);
crop('big.jpeg', '3.jpeg', array(0, 50, 50, 100),true);
crop('big.jpeg', '4.jpeg', array(50, 50, 100, 100),true);
Вот и всё.



include('/путь/к/скрипту/resize_crop.php');
затем вызываете нужную функциюresize('big.jpg', 'small.jpg', 50, 50, true);
// или
crop('big.jpg', 'crop.jpg');
то нужно заменить в функции следующие строки
на эти:
if ($w_i > $h_i) {
$x_o = ($w_i - $h_i) / 2;
$min = $h_i;
} else {
$y_o = ($h_i - $w_i) / 2;
$min = $w_i;
}
list($w_i, $h_i, $type) = getimagesize($file_input);
if (!$w_i || !$h_i)
return;
$types = array('','gif','jpeg','png');
$ext = $types[$type];
if ($ext) {
$func = 'imagecreatefrom'.$ext;
$img = $func($file_input);
} else
return;
if ($crop == 'square') {
$min = ($w_i > $h_i) ? $h_i : $w_i;
$w_o = $h_o = $min;
// Выравнивание по центру:
$x_o = intval(($w_i - $min) / 2);
$y_o = intval(($h_i - $min) / 2);
/*
// Выравнивание по правой стороне
$x_o = $w_i - $min;
// Выравнивание по низу
$y_o = $h_i - $min;
// Выравнивание по левой стороне
$x_o = 0;
// выравнивание по верху
$y_o = 0;
*/
} else {
list($x_o, $y_o, $w_o, $h_o) = $crop;
if ($percent) {
$w_o *= $w_i / 100;
$h_o *= $h_i / 100;
$x_o *= $w_i / 100;
$y_o *= $h_i / 100;
}
if ($w_o < 0)
$w_o += $w_i;
$w_o -= $x_o;
if ($h_o < 0)
$h_o += $h_i;
$h_o -= $y_o;
}
$img_o = imagecreatetruecolor($w_o, $h_o);
imagecopy($img_o, $img, 0, 0, $x_o, $y_o, $w_o, $h_o);
$temp_file = tempnam(sys_get_temp_dir() , 'crop');
if ($type == 2) {
$res = imagejpeg($img_o, $temp_file, 100);
} else {
$func = 'image'.$ext;
$res = $func($img_o, $temp_file);
}
if ($res)
return $temp_file;
else
return false;
}
Установленной на сервере 20Мб не хватает, приходится прибегать к ini_set('memory_limit', '35M');
35Мб это минимум того, что требуется!
Не везде на хостингах разрешен ini_set !
Также дополню, что еще нужно освобождать память ман: imagedestroy.
Видимо, слишком много оперативки сжирает вывод 12 фотографий на странице. :)
на этот:
А может из-за того, что у меня скрипт постоянно создает изображения при просмотре каталога, закончиться оперативная память на сервере?
Лучше было бы генерировать изображение один раз и сохранять его, и в последующие разы обращаться уже к нему.
Как это лучше сделать?!
Можно посмотреть код, в котором вы запускаете цикл для обрезки?
Скажите, как уменьшить прямоугольное изображение до определенного размера (например до 600px по длинной стороне)
list($temp_w, $temp_h) = getimagesize('1.jpg'); // путь к картинке$max = 600; // максимальный размер стороны
$h = $w = 0;
if ($temp_w < $temp_h) { // сравниваем размеры
$h = $max;
} else {
$w = $max;
}
resize('1.jpg', 'output.jpg', $w, $h); // вызываем основную функцию
А если сторона известна, то тогда всё будет ещё проще:
resize('1.jpg', 'output.jpg', 600, 0);либо
resize('1.jpg', 'output.jpg', 0, 600);в свой php файл вставил функцию crop и resize
В другой функции этого же файла:
$photo = $_FILES['filename']['name']."";
$photo_sm = preg_replace("/([a-zA-Z_\-0-9]*).([a-zA-Z]{3,4})/","\\1_sm.jpg","$photo");
resize($photo, $photo_sm, 0, 100);
crop('$photo_sm', '$photo_sm');
То есть с помощью регулярного выражения я добавляю к имени файла "_sm". Функция resize как и задумано изменяет размер. В результате после выполнения кода в папке лежит оригинальный файл 123.jpg и уменьшенный файл 123_sm.jpg , но уменьшенный файл не обрезан...
Моге на электронку скинуть полный код странички...это модуль antislaed
ошибку нашел сам... как и предполагал из-за невнимательности...
в строке crop('$photo_sm', '$photo_sm');
убрал кавычки crop($photo_sm, $photo_sm); и заработало. :)
Кстати, если бы кавычки были двойными, то всё работало бы нормально.
Но никак не могу понять, как мне получить превьюшку 130х195...?
т.е Не квадратную....
фотография может быть любого размера, а превьюшка должна получиться вертикальной 130 на 195
я думал сначала делать ресайз (0,195), а потом кроп (130,195)
list($w, $h) = getimagesize('image.jpg'); // получаем размеры изображения
if ($w < $h) { // если ширина меньше высоты
resize('image.jpg','temp.jpg',130,0); // уменьшаем по ширине
} else { // иначе
resize('image.jpg','temp.jpg',0,195); //уменьшаем по высоте
}
crop('temp.jpg','thumb.jpg',array(0,0,130,195)); // и обрезаем
просто добавляем еще одно условие
elseif($w==$h){
resize('image.jpg','temp.jpg',130,false);
}
И тогда код будет выглядеть следующим образом:
list($w, $h) = getimagesize('image.jpg'); // получаем размеры изображения
if ($w < $h) { // если ширина меньше высоты
resize('image.jpg','temp.jpg',130,0); // уменьшаем по ширине
}
elseif($w==$h){// если изображение является квадратом.
resize('image.jpg','temp.jpg',130,false);// уменьшаем пропорционально по ширине.
}
else { // иначе
resize('image.jpg','temp.jpg',0,195); //уменьшаем по высоте
}
crop('temp.jpg','thumb.jpg',array(0,0,130,195)); // и обрезаем
И спасибо за функции, очень пригодились. Правда стоило бы все эти решения, которые указаны в комментариях, вписать в саму статью, так как destroy изображения как не крути нужно, ведь без этого память засоряется. Ну и остальное добавить тоже следовало бы.
crop('исходный файл.jpeg','изменённый файл.jpeg'); resize('изменённый файл.jpeg','конечный файл.jpeg',200,200);Вышеприведённый код, например, обрезает изображения до размера квадрата и уменьшает до 200 px по ширине и длине.добавить:
if ($type == 3) { imagesavealpha($img_o, true); $trans_colour = imagecolorallocatealpha($img_o, 0, 0, 0, 127); imagefill($img_o, 0, 0, $trans_colour); }Я добавлю этот код в статью.
а почему черным заливается, а не белым?
Измени imagecolorallocatealpha($img_o, 0, 0, 0, 127);
на imagecolorallocatealpha($img_o, 255, 255, 255, 127);
Что требуется, нужно интегрировать в него функцию resize, crop что бы прежде чем файл сохранится в папке, нужно его обрезать по центру относительно всех сторон и сжимался до формата 150х150. Т.е размер загружаемого файла будет любым, а сохранятся он должен в формате 150х150. И ещё вопрос правда не по теме, но все же, как отсортировать загружаемые файлы, ну что бы загружались только png, jpg, gif. За ранее спасибо, а вообще автору спасибо за скрипт!
list($w, $h) = getimagesize($uploadfile); // получаем размеры $x = $y = 0; if ($w > $h) { // если ширина больше длины $x = ($w - $h) / 2; // вычисляем начало $w = $h + $x; // и конец координат } else { // иначе $y = ($h - $w) / 2; // делаем тоже самое $h = $w + $y; // для высоты } crop($uploadfile,$uploadfile,array($x,$y,$w,$h)); // запускаем функцию обрезки с массивом координат resize($uploadfile,$uploadfile,150,150); // запускаем функцию масштабированияНасчет того, чтобы загружались только изображения... Способов много, начиная от проверки разрешения файла и заканчивая MIME типами, но самый простой вариант, по моему мнению, следующий:
if (getimagesize('файл.джипег')) { // работаем с изображением } else { // это точно не изображение! удаляем. }Здесь мы пробуем получить размеры изображения. Если размеров нет, значит, это не изображение.
P.S Сорь за назойливость, только недавно приступил к изучению php.
на строку
Теперь переменная $uploadfile будет выглядеть так: ../../../uploads/[случайное число]_file.jpeg.
P. S. Не надо извиняться, все мы ещё учимся ;)
if ($width > $sw || $height > $sh) { $new = imagecreatetruecolor(150,150); if ($data['mime'] == 'image/jpeg' || $data['mime'] == 'image/jpg') { $old = imagecreatefromjpeg($_FILES['image']['tmp_name']); imagejpeg($old,$_FILES['image']['tmp_name'],100); } else { $old = imagecreatefromgif($_FILES['image']['tmp_name']); imagegif($new,$_FILES['image']['tmp_name']); } }на следующую:
if ($width > $sw || $height > $sh) { crop($_FILES['image']['tmp_name'], $_FILES['image']['tmp_name']); resize($_FILES['image']['tmp_name'], $_FILES['image']['tmp_name'], 150, 150); }А как мне сделать обрезку изображения по вертикали не снизу а сверху?
Есть вертикальная картинка произвольного размера, я ее уменьшаю до 300px.
resize($bigimage,'temp.jpg',300,0);
и потом привожу к виду 300x200px
crop('temp.jpg',$smallimage,array(0,0,300,200));
Она орезается снизу. А нужно сверху!
resize($bigimage,'temp.jpg',300,0); $size = getimagesize('temp.jpg'); // получаем размеры промежуточного изображения crop('temp.jpg',$smallimage,array(0, $size[1] - 200, 300, $size[1]));В скором времени постараюсь написать.
Распишите установку
// код загрузки изображения function resize($file_input, $file_output, $w_o, $h_o, $percent = false) { // код функции } resize('загруженное_изображение.jpg', 'avatar.jpg', 100, 100);Так и не смог понять, как сделать:
1. Загрузили оригинал. Обрезали его до ширины 1024рх, до высоты 768рх. Если размеры картинки меньше чем 1024х768, то ничего не делаем. Сохранили.
2. Обрезали до квадрата.
3. Уменьшили эту квадратную картинку до 150х150. Сохранили в папке /small с тем-же именем.
Оригинал, квадрат и иконку? Затем эти картинки загрузить на сервер и добавить путь каждой картинки в базу MySQL?!
Сижу вторые сутки мучаюсь!
Спасибо!
если изображение меньше заданного, то оно увеличивается ?
И как выводить функцию ? Здесь не написано
Или
"crop('big.jpg', 'crop.jpg');
resize('crop.jpg', 'avatar.jpg', 100, 100);"
это и есть вывод функции ?
$big = $_SERVER['DOCUMENT_ROOT']."/путь_к_файло/имя_файло.расширение_файло";
crop('$big', '$crop');
1. изменить размер по БОЛЬШЕЙ стороне до 100 px
2. затем добавить белое поле снизу и сверху до квадрата
чтобы получить 100х100 ?
Что-то не выходит обработать картинку.
На сервер закачивается, а вот ресайз и кроп ошибят!
За ранее спасибо...
Возможно, вы выложите код, с которым работаете на pastebin? Так мне проще будет понять, что именно у вас не работает.
Но мне не очень нравится, что формат входного файла определяется через его расширение - это, IMHO, не есть гут.
Во первых не безопасно, а во вторых можно пролететь - я встречал старенькие CMS и фреймворки, где все файлы для унификации доступа обзывались .gif вне зависимости от формата.
В первый раз невнимательно посмотрел - сорри... ;)
Мне показалось, что анализируется расширение файла, а у Вас аналогичная схема, просто еще идет отсечение прочих форматов, кроме трех основных...
Посмотрите в сторону ImageMagick, а именно этот материал: snippets.pp.ru/article/151
bigtorrent-ua.com/jquery_upload_crop.zip
PS: Архив можно скачать в течение 5-дней
Спасибо!
odyniec.net/projects/imgareaselect/examples.html
я спрашиваю потому что там можно наводить на картинку как тебе надо и передавать через пост координаты которые можно вставить в
crop('big.jpg', 'frame.jpg', array(10, 10, -10, -10));
проблема в том что именно в примере где отправляются
данные через пост нету ограничения по выделению , но он есть в других примерах ,но у меня почему то не получаеться их соединить , помогите плиз
а плагин мне ваш нравится
тока хотел сказать вроде данные после загрузки надо удалять чтобы память не загружать
у меня идет код такой подскажите как и когда создать копию изображения
$name = $_FILES['upload']['name'];
$temp = $_FILES['upload']['tmp_name'];
move_uploaded_file ($temp,"avatar/$name");
$way = "avatar/$name";
echo "";
$crop == 'square' оказалось достаточно))
И ничего ((( Загружается только оригинальный файл, а ничего не ресайзится ((
З.Ы. Резать весь код, размещенный в тегах пхп это кощунство )))
Нина, большое спасибо за код. Не каждый день встретишь столь юную девушку-программиста *реверанс*
Если бы и все остальные проблемы разрешались так легко...
A это php обработчик он сохраняет фото
Мне надо чтобы большие фото уменьшились (не обрезались) при загрузке а фото которые подходят по размеру такие и оставались подскажите что делать?
Сделал:
$trans_colour = imagecolorallocate($img_o, 255, 0, 0);
imagefill($img_o, 0, 0, $trans_colour);
Перед:
imagecopy($img_o, $img, 0, 0, $x_o, $y_o, $w_o, $h_o);
Но всё равно чёрная полоса, вместо красной.
imagecopy($img_o, $img, 0, 0, 0, 0, $w_i, $h_i);
можете подсказать, почему у меня не создается обрезанное изображение ? если выполнить скрипт второй раз, то он выдает ошибку:
fatal error^ cannot redeclare crop () (previously declared in (1): eval()'d code8) in (1): eval()'d code on line 26
а при компиляции никаких ошибок не выдает )
что это за ошибка и почему не создавется новое изображение ?
заранее благодарен )
еще вопросик: а можно ли обрезать изображение и вывести ео в браузер, не сохраняя его на диске ? то я в пхп еще не очень разбираюсь )
как это сделать?
просто мне нужно 200х700
Заливка фоток ... сейчас же все модные, с 7-10-15-25 мегапикселками ходят.
фотография... 3000*2000 пикселей. Когда делаем imagecreatefromjpeg, то на сервере почему-то не отрабатывается, так как, насколько я понял, шарясь по сети, что при этом выедается памяти 3000*2000*24=144 Мб (при том, что картинка может весить 600Кб-1Мб)
как можно обойти, не меняя размер выделяемой памяти? как-то можно, на сайте есть двиг, который заливается эти картинки, но не могу в коде найти , где он это делает (двиг писал какой-то псих, впервые такую технологию вижу, но это не главное)
Есть интернет магазин на котором при заливке в каталог товаров оно предлогает вставить три картинки большую,маленькую и среднюю,но размеры вы должны обрезать вручную,что крайне не удобно.Нужно чтобы масштабирование картинки происходило автоматически.
вот кусочек которые походу отвечает за данные о залитом изображении:
....
function GetPictureSize( $filename )
{
$size_info=getimagesize("./products_pictures/".$filename);
resize($file_input, $file_output, $w_o, $h_o, $percent = false);
return ((string)($size_info[0] + 40 )).", ".((string)($size_info[1] + 40 ));
}
....
А вот скрипт который бы нужно туда вставить:
function resize($file_input, $file_output, $w_o, $h_o, $percent = false)
{
list($w_i, $h_i, $type) = getimagesize($file_input);
if (!$w_i || !$h_i) {
echo 'Невозможно получить длину и ширину изображения';
return;
}
$types = array('','gif','jpeg','png');
$ext = $types[$type];
if ($ext) {
$func = 'imagecreatefrom'.$ext;
$img = $func($file_input);
} else {
echo 'Некорректный формат файла';
return;
}
if ($percent) {
$w_o *= $w_i / 100;
$h_o *= $h_i / 100;
}
if (!$h_o) $h_o = $w_o/($w_i/$h_i);
if (!$w_o) $w_o = $h_o/($h_i/$w_i);
$img_o = imagecreatetruecolor($w_o, $h_o);
imagecopyresampled($img_o, $img, 0, 0, 0, 0, $w_o, $h_o, $w_i, $h_i);
if ($type == 2) {
return imagejpeg($img_o,$file_output,100);
} else {
$func = 'image'.$ext;
return $func($img_o,$file_output);
}
}
простая замена кусочка кода не катит выбивает ошибку,подмена кусочков кода тоже не работает(просто не реагирует).
Добавлено 13 минут назад
моё знание PHP так на троечку пока,поэтому если нормально обьяснить то впринцыпи могу попробовать понять :)
Хороший скрипт.
Как раз собирался написать скрипт для сведения аватаров к одинаковым размерам. Для примера очень даже пригодился.
У меня проблемка( Можете помочь?
Мне нужна чтоб при загрузки большой картинки на сервер она сжималась и меняла ширину и высоту где-то 200 на 200, пожалуйста помоги.
Код загрузки файла:
//------------------------
//------------------------
{
echo ("Размер файла превышает три мегабайта");
exit;
}
// Проверяем загружен ли файл (is_uploaded_file -- Определяет, был ли файл загружен при помощи HTTP POST)
if(is_uploaded_file($_FILES["filename"]["tmp_name"]))
{
// Если файл загружен успешно, перемещаем его
// из временной директории в конечную
// move_uploaded_file -- Перемещает загруженный файл в новое место
move_uploaded_file($_FILES["filename"]["tmp_name"], "img/".$_FILES["filename"]["name"]);
} else {
echo("Ошибка загрузки файла");
}
Тут я так понял помогают.
Мне нужна Ваша помощ.
recens.ru/upload/resize/crop.png
А если картинка вертикальная, как сделать кроп по центру, подскажите пожалуйста.
Мне периодически необходимо обрезать у рисунков белые поля (края) с четырех сторон (слева, сверху, справа, снизу),
т.е. убирать белые "окаймления" до "мяса", т.е чтобы фото стала без белых краев (полос), если они у нее есть.
А потом уже recize в нужные размеры...
Подскажите, пжлс, как этого добиться? (в ручную долго и нудно, и границы отмечать очень тяжело - долго целиться, например, с пом. Paint Net). Ну вы меня поняли...
Спасибо.
Как делать resize я понял. (все работает у меня).
Но вот как вычислить белые поля у картинки, и обрезать их я не могу пока сообразить...
Никак Вашим скриптом не обрезать фото до 30*30 пикс. Исходное фото любого размера, нужно просто вырезать середину например 30*30 пискселей. Спасибо заранее