Добрый день. Хочу поделиться с разработчиками такой историей.
Вводные: 1С с номенклатурой с картинками. Картинки все 1000х1000. Надо выгрузить товары на сайт, создать детальную картинку и картинку для анонса. Детальная картинка остается 1000х1000, анонс уменьшается до "не более 130px по ширине".
Варианты: сделал страничку с компонентом catalog.import.1c. Настроил инфоблок, установил для импорта "Использовать настройки инфоблока для обработки изображений". Выгружает и детальную, и анонс размером 130px. Снял "Использовать настройки инфоблока для обработки изображений" - установил в настройках импорта нужные величины. Теперь выгружается как надо, однако качество генерируемых картинок анонса резко упало. Проблема: помимо того, что компонент импорта некорректно работает с настройками инфоблока, - нет никакой возможности контролировать процесс выгрузки и обработки картинок.
Решение: решение нехорошее, но рабочее. В файле /bitrix/modules/iblock/classes/general/cml2.php на строке 175 стоит вызов стандартной функции обработчика изображений
Сама функция подробно описана http://dev.1c-bitrix.ru/api_help/iblock/classes/ciblock/ResizePicture.php И как видно для импорта вообще не используются дополнительные параметры. Такие как, например, METHOD. Короче при импорте из 1С картинки уменьшаются при помощи imagecopyresized, а не imagecopyresample, что и приводит к адскому качеству превьюшек. Я сделал так:
Код
$resized = CIBlock::ResizePicture(CFile::MakeFileArray($new_file), array(
"WIDTH" => $resize[0],
"HEIGHT" => $resize[1],
// by moro
"METHOD" => "resample",
"COMPRESSION" => "95",
// end by moro
));
и получил желаемое.
Я подозреваю, что эта особенность связана с желанием уменьшить нагрузку на сервер в процессе импорта. Действительно при 10 000 товаров это значительная экономия ресурсов. С другой стороны, мне нужно импортировать 20 товаров, я могу себе позволить ресэмплить фотографии, почему бы не дать мне такую возможность?
Хотелось бы, чтобы разработчики разъяснили - это фича или баг? Потому что, конечно, хачить ядро - это совсем не то, что хочется делать в случае Битрикс)))
Спасибо, ценное знание, Александр. Сам это отмечал уже эту проблему с качеством. Однако я склоняюсь (в своей текущей задаче) к обработке изображений перед выгрузкой на стороне 1С-ки.
function ResizePicture($file, $resize)
{
if(!is_array($resize) || strlen($file) <= 0) //mod by Kola
Это в начале функции на несколько строк выше правки Александра. Тогда, если в настройках интеграции убрана галка с Автоматически генерировать картинку анонса, то при выгрузке не будет создаваться картинка предварительного просмотра (простым копированием картинки детального просмотра) и тратить ресурсы при выгрузке и место на хостинге, что IMHO логично.
Товарищи админы и просто знающие. Судя по всему, и в версии 11.5 исправления ресайза картинок Александра по прежнему актуальны. Надо уже что-то делать, не хочется каждый раз в ядро лезть, может мне тикет оставить?
А где находятся эти настройки? Я нигде не нашел эти настройки. Проблема состоит в том что картинки, выгружаемые из 1с, становятся маленькими. Вот я не могу найти где настройки для размера. Может кто-нибудь подсказать?
В админке Контент -> Информ. блоки -> Типы информ. блоков -> [Тип иблока вашего каталога (например, 1С каталог)] -> [Иблок вашего каталога (например, Каталог Товаров)], в настройках иблока выбираете вторую вкладку Поля, а там строчки Картинка для анонса и Детальная картинка.