khokhlov.aser
Постоялец
- Регистрация
- 1 Дек 2015
- Сообщения
- 91
- Реакции
- 186
- Автор темы
- #1
Стандартная библиотека GD делает на редкость мыльные фото. Как навести резкость на всех фото и уменьшить их размер?
Использовать библиотеку ImageMagic для обработки.
Требования :
- доступ к серверу если не установлено.
- Prestashop 1.6
Если не установлено, то устанавливаем:
Не забываем рестартануть Апаче
Далее создаем файл override/classes/ImageManager.php
Содержимое:
Всё. Перегенерируем необходимые форматы изображений. После чистим кэш.
Есть ограничения :
- не работает с прозрачными PNG. Фон будет залит белым.
- время перегенерации увеличивается. Рекомендую использовать модуль для перегенерации пачками. Иначе можно получить Timeout. Модуль к примеру вот этот: Для просмотра ссылки Войдиили Зарегистрируйся
всем спасибо. будут вопросы - пишите. у меня работает.
Использовать библиотеку ImageMagic для обработки.
Требования :
- доступ к серверу если не установлено.
- Prestashop 1.6
Если не установлено, то устанавливаем:
Код:
sudo apt-get update
sudo apt-get install php5-imagick
sudo php5enmod imagick
Не забываем рестартануть Апаче
Код:
sudo service apache2 restart
Далее создаем файл override/classes/ImageManager.php
Содержимое:
Код:
<?php
class ImageManager extends ImageManagerCore
{
/**
* Resize, cut and optimize image
*
* @param string $src_file Image object from $_FILE
* @param string $dst_file Destination filename
* @param int $dst_width Desired width (optional)
* @param int $dst_height Desired height (optional)
* @param string $file_type
* @param bool $force_type
* @param int $error
* @param int $tgt_width
* @param int $tgt_height
* @param int $quality
* @param int $src_width
* @param int $src_height
* @return bool Operation result
*/
public static function resize($src_file, $dst_file, $dst_width = null, $dst_height = null, $file_type = 'jpg',
$force_type = false, &$error = 0, &$tgt_width = null, &$tgt_height = null, $quality = 5,
&$src_width = null, &$src_height = null)
{
if (PHP_VERSION_ID < 50300) {
clearstatcache();
} else {
clearstatcache(true, $src_file);
}
if (!file_exists($src_file) || !filesize($src_file)) {
return !($error = self::ERROR_FILE_NOT_EXIST);
}
list($src_width, $src_height, $type) = getimagesize($src_file);
// If PS_IMAGE_QUALITY is activated, the generated image will be a PNG with .jpg as a file extension.
// This allow for higher quality and for transparency. JPG source files will also benefit from a higher quality
// because JPG reencoding by GD, even with max quality setting, degrades the image.
if (Configuration::get('PS_IMAGE_QUALITY') == 'png_all'
|| (Configuration::get('PS_IMAGE_QUALITY') == 'png' && $type == IMAGETYPE_PNG) && !$force_type) {
$file_type = 'png';
}
if (!$src_width) {
return !($error = self::ERROR_FILE_WIDTH);
}
if (!$dst_width) {
$dst_width = $src_width;
}
if (!$dst_height) {
$dst_height = $src_height;
}
$width_diff = $dst_width / $src_width;
$height_diff = $dst_height / $src_height;
$ps_image_generation_method = Configuration::get('PS_IMAGE_GENERATION_METHOD');
if ($width_diff > 1 && $height_diff > 1) {
$next_width = $src_width;
$next_height = $src_height;
} else {
if ($ps_image_generation_method == 2 || (!$ps_image_generation_method && $width_diff > $height_diff)) {
$next_height = $dst_height;
$next_width = round(($src_width * $next_height) / $src_height);
$dst_width = (int)(!$ps_image_generation_method ? $dst_width : $next_width);
} else {
$next_width = $dst_width;
$next_height = round($src_height * $dst_width / $src_width);
$dst_height = (int)(!$ps_image_generation_method ? $dst_height : $next_height);
}
}
if (!ImageManager::checkImageMemoryLimit($src_file)) {
return !($error = self::ERROR_MEMORY_LIMIT);
}
//Set Imagick Object values
$src_image = new Imagick();
$src_image->readImage($src_file);
$src_image->setImageCompression(Imagick::COMPRESSION_JPEG);
$src_image->setInterlaceScheme(Imagick::INTERLACE_PLANE);
$src_image->setImageCompressionQuality(89);
$src_image->sharpenimage(2, 0.5, 134217727);
$src_image->gaussianBlurImage(0.03,0.03);
$src_image->stripImage();
$src_image->thumbnailImage($dst_width, $dst_height, Imagick::FILTER_SINC, 1);
//Output the final Image using Imagick
return $src_image->writeImage($dst_file);
}
}
Всё. Перегенерируем необходимые форматы изображений. После чистим кэш.
Есть ограничения :
- не работает с прозрачными PNG. Фон будет залит белым.
- время перегенерации увеличивается. Рекомендую использовать модуль для перегенерации пачками. Иначе можно получить Timeout. Модуль к примеру вот этот: Для просмотра ссылки Войди
всем спасибо. будут вопросы - пишите. у меня работает.