- Поисковые системы
- Практика оптимизации
- Трафик для сайтов
- Монетизация сайтов
- Сайтостроение
- Социальный Маркетинг
- Общение профессионалов
- Биржа и продажа
- Финансовые объявления
- Работа на постоянной основе
- Сайты - покупка, продажа
- Соцсети: страницы, группы, приложения
- Сайты без доменов
- Трафик, тизерная и баннерная реклама
- Продажа, оценка, регистрация доменов
- Ссылки - обмен, покупка, продажа
- Программы и скрипты
- Размещение статей
- Инфопродукты
- Прочие цифровые товары
- Работа и услуги для вебмастера
- Оптимизация, продвижение и аудит
- Ведение рекламных кампаний
- Услуги в области SMM
- Программирование
- Администрирование серверов и сайтов
- Прокси, ВПН, анонимайзеры, IP
- Платное обучение, вебинары
- Регистрация в каталогах
- Копирайтинг, переводы
- Дизайн
- Usability: консультации и аудит
- Изготовление сайтов
- Наполнение сайтов
- Прочие услуги
- Не про работу
Тренды маркетинга в 2024 году: мобильные продажи, углубленная аналитика и ИИ
Экспертная оценка Адмитад
Оксана Мамчуева
Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий
Всем привет. Проблема стара, готового решения не нашел.
Если фотки, из них делаем превьюшки.
Формат фотографии может быть неверным (png сохранено как jpg)
Делаю следующее:
$image = new Imagick($source);
$image->setImageColorspace(Imagick::COLORSPACE_RGB);
} else {
return false;
}
$image->thumbnailImage($w, $h, true);
$canvas = new Imagick();
$canvas->newImage($w, $h, "white");
$canvas->setImageColorspace(Imagick::COLORSPACE_RGB);
/* Наложение оригинального изображения на холст */
$canvas->compositeImage($image, Imagick::COMPOSITE_DEFAULT, ($w-$image->getImageWidth()) / 2, ($h-$image->getImageHeight()) / 2);
$canvas->setImageFormat("jpeg");
$canvas->setImageCompression(imagick::COMPRESSION_JPEG);
$canvas->setImageCompressionQuality(75);
$canvas->stripImage();
return $canvas->writeImage($dest); // TRUE OR FALSE
На выходе получаю изображение на белом фоне, но фон исходной картинки может быть как исходным, так и черным (прозрачность меняется на черный), по всей видимости это как раз неправильно сохраненные картинки. Как можно получить готовое изображение именно в jpeg, и без артефактов (прозрачность сделать белым цветом например)?
Возможно, это вам поможет http://www.php.su/forum/topic.php?forum=29&topic=741
Вот ещё информация http://www.asf.ru/docs/php/imagick.setimagealphachannel.html
Спасибо, уже читал. Или лыжи не едут, или одно из двух.
В коде я выполняю именно то, что там советуют. Результат тот же...
Оригинал фото https://yadi.sk/i/Agg3lrXDqERE5
Результат https://yadi.sk/i/VN2RVvBPqEREb
Поиграйтесь с Imagick::getImageAlphaChannel() и Imagick::setImageAlphaChannel(), может что и получится.
Поиграться то получается, результат не впечатляет. Один из вариантов привел к появлению нормальной миниатюры на черном фоне ). К сожалению, совершенно не разбираюсь в альфа-каналах и прочей графической терминологии.
Я так понял, что есть какие-то проблемы с ImageColorspace, так как следующая конструкция дает интересный, но нелогичный с моего ламерского взгляда, результат https://yadi.sk/i/uH3yUplhqEbgt
$canvas->setImageColorspace( $image->getImageColorspace() );
Возможно, этот код подойдет
Спасибо, вариант отличный, на больших картинках все отлично. Однако, в миниатюре 150*150 опять артефакты...
https://yadi.sk/i/-5Yt_PpSqHuWe
Артефакты вылезали по всей видимости из-за дробных значений в формуле размера:
Приведя к int картинка получается абсолютно нормальной. Еще раз спасибо.