- Поисковые системы
- Практика оптимизации
- Трафик для сайтов
- Монетизация сайтов
- Сайтостроение
- Социальный Маркетинг
- Общение профессионалов
- Биржа и продажа
- Финансовые объявления
- Работа на постоянной основе
- Сайты - покупка, продажа
- Соцсети: страницы, группы, приложения
- Сайты без доменов
- Трафик, тизерная и баннерная реклама
- Продажа, оценка, регистрация доменов
- Ссылки - обмен, покупка, продажа
- Программы и скрипты
- Размещение статей
- Инфопродукты
- Прочие цифровые товары
- Работа и услуги для вебмастера
- Оптимизация, продвижение и аудит
- Ведение рекламных кампаний
- Услуги в области SMM
- Программирование
- Администрирование серверов и сайтов
- Прокси, ВПН, анонимайзеры, IP
- Платное обучение, вебинары
- Регистрация в каталогах
- Копирайтинг, переводы
- Дизайн
- Usability: консультации и аудит
- Изготовление сайтов
- Наполнение сайтов
- Прочие услуги
- Не про работу
В 2023 году Одноклассники пресекли более 9 млн подозрительных входов в учетные записи
И выявили более 7 млн подозрительных пользователей
Оксана Мамчуева
Как снизить ДРР до 4,38% и повысить продажи с помощью VK Рекламы
Для интернет-магазина инженерных систем
Мария Лосева
Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий
Коллеги, пытался создать скрипт, который бы создавал из картинки 1.jpg превьюшку 2.jpg
Все как бы работает, но качество архихреновое. Знаю что как то делают много лучше.
Как его можно доделать? И будет ли нормально работать не только с JPEG, но и GIF ?
Заранее благодарен за советы.
$old = imageCreateFromJpeg("1.jpg");$w = imageSX($old);
$h = imageSY($old);
$k=$w / 200;
$w_new=round($w/$k);
$h_new=round($h/$k);
$new = imageCreate($w_new, $h_new);
imageCopyResized($new, $old, 0, 0, 0, 0, $w_new, $h_new, $w, $h);
imageJpeg($new, "2.jpg");
imageDestroy($old);
imageDestroy($new);
про качество картинки на выходе:
1) imagejpeg() имеет еще один параметр - качество JPEG в процентах. можешь поставть что-то > дефолтных 75. типа imageJpeg($new, "2.jpg", 90);
2) вместо imageCopyResized можешь попробовать imageCopyResampled - боле качественный результат, но дольше работает. при массовом производстве может иметь значение
3) мне попадался пример создания качественных превью, где картинка приводилась к нужному размеру в несколько приемов, т.е. в цикле вызывался imagecopyresampled для все меньшего и меньшего размера. так картинка меньше замыливается. опятьже времени может не хватить, поставь перед всем этим settimelimit(nnnnn)
"будет ли нормально работать не только с JPEG, но и GIF" -- поставь imageCreateFromGIF вместо imageCreateFromJpeg и будет тебе щастье!
а еще лучше использовать imagemagick, если сервер свой - то оптимальный вариант.
Навигатор проблема с качеством решается заменой функции imageCopyResized на imagecopyresampled просто тупо замени и будет хорошее качество
KosoyRoman добавил 03.10.2008 в 22:14
define ("WIDTH","200");
define ("HEIGHT","150");
function make_thumb($img_name,$filename,$new_w,$new_h)
{
$ext=getExtension($img_name);
if(!strcmp("jpg",$ext) || !strcmp("jpeg",$ext))
$src_img=imagecreatefromjpeg($img_name);
if(!strcmp("png",$ext))
$src_img=imagecreatefrompng($img_name);
$old_x=imageSX($src_img);
$old_y=imageSY($src_img);
$ratio1=$old_x/$new_w;
$ratio2=$old_y/$new_h;
if($ratio1>$ratio2) {
$thumb_w=$new_w;
$thumb_h=$old_y/$ratio1;
}
else {
$thumb_h=$new_h;
$thumb_w=$old_x/$ratio2;
}
$dst_img=ImageCreateTrueColor($thumb_w,$thumb_h);
imagecopyresampled($dst_img,$src_img,0,0,0,0,$thumb_w,$thumb_h,$old_x,$old_y);
if(!strcmp("png",$ext))
imagepng($dst_img,$filename);
else
imagejpeg($dst_img,$filename);
imagedestroy($dst_img);
imagedestroy($src_img);
}
function getExtension($str) {
$i = strrpos($str,".");
if (!$i) { return ""; }
$l = strlen($str) - $i;
$ext = substr($str,$i+1,$l);
return $ext;
}
$errors=0;
if(isset($_POST['Submit']))
{
$image=$_FILES['image']['name'];
if ($image)
{
$filename = stripslashes($_FILES['image']['name']);
$extension = getExtension($filename);
$extension = strtolower($extension);
if (($extension != "jpg") && ($extension != "jpeg") && ($extension != "png"))
{
echo '';
$errors=1;
}
else
{
$size=getimagesize($_FILES['image']['tmp_name']);
$sizekb=filesize($_FILES['image']['tmp_name']);
if ($sizekb > MAX_SIZE*2048)
{
echo '';
$errors=1;
}
$image_name=time().'.'.$extension;
$newname="../images/".$image_name;
$copied = copy($_FILES['image']['tmp_name'], $newname);
if (!$copied)
{
echo '';
$errors=1;
}
else
{
$thumb_name='../images/thumbs/thumb_'.$image_name;
$thumb=make_thumb($newname,$thumb_name,WIDTH,HEIGHT);
}} }}
$newname = нормальное фото
$thumb_name - трамб
Друзья, спасибо за подсказки. Но что-то не получается. Точнее получается вот что:
Итак, есть исходный "кошак" 800*600 размером 128 кб:
Стоит задача сделать превью с шириной 200.
Фотошоп с этой задачей справляется отлично и я думаю к этому качеству и надо стремиться:
(28 кб правда, но оно того стоит)
Теперь беру свой первоначальный скрипт (в первом посте) и делаю превью:
(4 кб всего но и качества как бы нет)
Теперь ставлю качество "100" в функции imagejpeg()
Размер подскакивает в разы, а качество не меняется:
Затем меняю функцию imageCopyResized() на imagecopyresampled() и в итоге картинка совсем не меняется - ни внешне, ни размером:
Еще я попробовал разделить операцию на 4 этапа, тоесть постепенно уменьшать размеры. Результат превзошел все ожидания :)
Что же тут не так ?
$new = imageCreate($w_new, $h_new);
нужно заменить на труколор!!!!!!
$new = ImageCreateTrueColor($w_new, $h_new);
---
про imagecopyresampled уже сказали, но всё равно не забудьте)
Вах-вах-вах :)
Большое спасибо!