|
|
|
| Помогите пожалуйста
надо уменьшить изображение... все вроде работает, вот только результат - черный квадрат... НО с нужными размерами
// resize go
function resize($image_path, $image_small_path, $image_width)
{
### размер фотки
$name=$image_path;
$maxx=$image_width;
#узнаем разрешение и размер подложки
$olds=getimagesize($name);
# $olds[0] - ширена картинки
$razr=strstr($name,'.');
if($olds[0]>$maxx)
{
$q=$olds[0]/$olds[1];
$xo=$olds[0];
$yo=$olds[1];
$xn=$maxx;
$yn=round($maxx/$q);
}
else
{
$xo=$olds[0];
$yo=$olds[1];
$xn=$xo;
$yn=$yo;
}
if($type==".jpeg"||".jpg"||".JPEG"||".JPG")
{
//Content type
@header('Content-type: image/jpeg');
// Load
$nim = imagecreatetruecolor($xn, $yn);
$sis = imagecreatefromjpeg($name))
// Resize
imagecopyresized($nim, $sis, 0, 0, 0, 0, $xn, $yn, $xo, $yo);
// Output
imagejpeg($nim, $image_small_path, 100);
imagedestroy($nim);
}
// resize end
resize("1.jpg", "./dir/", "300");
|
| |
|
|
|
|
|
|
|
для: darkozoid
(04.09.2012 в 21:40)
| | getimagesize() уже возвращает вам тип изображения, так что $razr=strstr($name,'.'); и if($type==".jpeg"||".jpg"||".JPEG"||".JPG") выбросите (тем более, что можно было бы перевести строку в любой регистр, чтобы не проверять каждый из них), и просто проверьте число. Вопрос только, откуда вы берете эти изображения - если изменяете размер загруженного файла, то почему разрешаете тогда загрузку не нужных вам типов, чтобы после проверять?
Вместо вывода изображения, выведите те размеры, которые вы получили своей арифметикой, будет видна проблема.
И высвобождать надо оба ресурса, а не только $nim. | |
|
|
|
|
|
|
|
для: darkozoid
(04.09.2012 в 21:40)
| | Я честно говоря уже не помню что я тогда делал, но это был мой первый опыт, после этого я дорабатывал функцию. теперь она нормально работает
// resize go
function resize($new_image_name, $image_small_path, $image_width){
### размер фотки
$name=$new_image_name;
$maxx=$image_width;
#узнаем разрешение и размер подложки
$olds=getimagesize($_FILES['add']['tmp_name']['img']);
# $olds[0] - ширена картинки
//Content type
if($olds[0]>$maxx){
$q=$olds[0]/$olds[1];
$xo=$olds[0];
$yo=$olds[1];
$xn=$maxx;
$yn=round($maxx/$q);
}else{
$xo=$olds[0];
$yo=$olds[1];
$xn=$xo;
$yn=$yo;
}
header('Content-type: '.$olds['mime']);
// Load
$nim = imagecreatetruecolor($xn, $yn);
switch($olds['mime']){
case 'image/jpeg' : $sis = imagecreatefromjpeg($image_small_path.'/'.$name); break;
case 'image/png' : $sis = imagecreatefrompng($image_small_path.'/'.$name); break;
case 'image/gif' : $sis = imagecreatefromgif($image_small_path.'/'.$name); break;
}
// Resize
imagecopyresized($nim, $sis, 0, 0, 0, 0, $xn, $yn, $xo, $yo);
// Output
switch($olds['mime']){
case 'image/jpeg' : imagejpeg($nim, $image_small_path.'/'.$name, 100); break;
case 'image/png' : imagepng($nim, $image_small_path.'/'.$name); break;
case 'image/gif' : imagegif($nim, $image_small_path.'/'.$name); break;
}
imagedestroy($nim);
imagedestroy($sis);
}
// resize end
|
| |
|
|
|
|
|
|
|
для: darkozoid
(05.03.2014 в 15:07)
| | function resize($new_image_name, $image_small_path, $image_width){
### размер фотки
$name=$new_image_name;
$maxx=$image_width;
И зачем это дублирование?
imagecopyresized для image/gif пойдет, для truecolor не совсем.
Сохранение с качеством 100, это вбухать полный размер на диск. | |
|
|
|
|
|
|
|
для: confirm
(05.03.2014 в 18:48)
| | >function resize($new_image_name, $image_small_path, $image_width){
> ### размер фотки
> $name=$new_image_name;
> $maxx=$image_width;
>
>И зачем это дублирование?
да это после вставки функции из исходника в скрипт осталось, я у себя потом это исправил, а тут осталось, на работе то не сказывается...
>imagecopyresized для image/gif пойдет, для truecolor не совсем.
а что лучше? imagecopyresampled?
>Сохранение с качеством 100, это вбухать полный размер на диск.
а с меньшим качеством картинка плохая.... | |
|
|
|
|
|
|
|
для: darkozoid
(25.03.2014 в 16:35)
| | Лучший результат для truecolor конечно дает imagecopyresampled() - полноцветные изображения и изображения основанные на палитре, это кардинально разные изображения. А вот "а с меньшим качеством картинка плохая", это не оправдание, чтобы гнать клиенту лишние килобайты. Даже указав качество 90%, можно значительно сократить размер файла.
И вообще о качестве. На хостат доступна уже версия РНР 5.5, а если не доступна на вашем, добивайтесь пусть устанавливают, или валите с этого хоста на другой, чего у лентяев ошиваться.
В версиях 5.5.Х доступны новые функции GD:
imagescale - изменение размеров изображения.
<?
$im = imagecreatefromjpeg("img.jpg");
//уменьшаем
$im = imagescale($im, imagesx($im)/2, imagesy($im)/2, IMG_BICUBIC_FIXED & IMG_BILINEAR_FIXED);
//увеличиваем
$im = imagescale($im, imagesx($im)*2, imagesy($im)*2, IMG_BICUBIC_FIXED & IMG_BILINEAR_FIXED);
|
Третьим аргументом функции является метод интерполяции применяемый (применяемых) в операции. Метод интерполяции можно задать ресурсу и функцией imagesetinterpolation(resource, method);
Это доступные методы интерполяции и фильтры (описано кратко, более подробно о них ищите в сети):
IMG_BELL - фильтр Белла (полосовой фильтр с колоколообразной характеристикой)
IMG_BESSEL - фильтр Бесселя (линейный фильтр, спектр на выходе фильтра в полосе пропускания сохраняется практически неизменным)
IMG_BICUBIC - бикубическая (последовательная кубическая интерполяция)
IMG_BICUBIC_FIXED - бикубическая с фиксированной точкой (единожды найденные коэффициенты используются для многократного вычисления интерполированного значения функции в произвольных точках квадрата)
IMG_BILINEAR_FIXED - билинейная (интерполяция методом ближайшего соседа) с фиксированной точкой (по умолчанию применяется к созданному новому ресурсу)
IMG_BLACKMAN - функция Блэкмана, определяет количество и ширину перехода, которая происходит во время фильтрации (муар, резкость)
IMG_BOX - кубическое размытие
IMG_BSPLINE - сплайн-интерполяция
IMG_CATMULLROM - фильтр подчеркивающий края (увеличение резкости)
IMG_GAUSSIAN - фильтр Гаусса (сглаживание, размытие)
IMG_GENERALIZED_CUBIC - обобщенный кубический сплайн, фрактальная интерполяция
IMG_HERMITE - интерполяция Эрмита (смешивание)
IMG_HAMMING - фильтр Хэмминга (удаление шумов)
IMG_HANNING - фильтр Хеннинга (удаление шумов)
IMG_MITCHELL - фильтр Митчелла (подчеркивание краев)
IMG_POWER - усиление
IMG_QUADRATIC - обратная квадратичная интерполяция
IMG_SINC - подавление спектра выше частоты среза, на выходе низкочастотная полоса спектра
IMG_NEAREST_NEIGHBOUR - интерполяция методом ближайшего соседа
IMG_WEIGHTED4 - весоизмерительный фильтр
IMG_TRIANGLE - треугольная интерполяция
Указанные методы применимы для всех функций, которые преобразуют изображение. | |
|
|
|
|
|
|
|
для: confirm
(25.03.2014 в 17:04)
| | Спасибо большое, теперь буду знать | |
|
|
|
|