Ошибка масштабирования PNG с прозрачностью

Alex S. добавил(а) 3 года назад
Известна

На картинках PNG с прозрачной подложкой, отмасштабированных до маленьких размеров проявляются артефакты в виде серого шума вместо чистой подложки.

Возможная причина - игнорирование параметра Filters при вызове CFile::ResizeImageGet, при этом по умолчанию Битриксом выставляются в качестве фона прозрачные, но чёрные пикселы и используется увеличение резкости, которое не работает нормально при сильном уменьшении масштаба.

В качестве примера во вложении - пиктограмма из верхнего меню "Услуги", отмасштабированная от 398*265 до 59*39.

77b029beec9545232ab9e1ed5514d61f

Ответы (1)

фото
1

Действительно, мы пользуемся стандартной функцией 1С-Битрикса для отображения иконок. Проверили работу функционала на демоверсии. Все работает корректно – уменьшенное изображение в .png не имеет шума на фоне. Возможно, есть проблемы в исходнике.

Просим обратиться по этому вопросу в нашу поддержку https://aspro.ru/support/. Посмотрим, что происходит на вашем проекте. Разберемся, на каком этапе возникает проблема. При необходимости исправим ее или свяжемся с разработчиками платформы для исправления ситуации.

фото
1

> Просим обратиться по этому вопросу в нашу поддержку https://aspro.ru/support/.

А там меня отправили сюда, так что обратно я уже не пойду :)

У меня-то вопрос решён, цель публичного обращения - чтобы проблема была закрыта не только у меня.


То что на вашем демо-сервере всё работает, не значит что работает у всех. Проблема известна очень давно, упомянута в т.ч. и в официальной документации к функции (в комментариях пользователей).

Также известны обходные пути решения:

1) простой, но не всегда работающий: не оставлять при вызове ResizeImageGet фильтр по умолчанию - как это делаете вы во всех случаях - а принудительно инициализировать пустой фильтр или выставлять в нём precision == 0;

2) и метод посложнее - проводить попиксельную обработку.

Добавить в ваш код вот этот самый пустой array() в вызов ResizeImageGet в качестве фильтра при сильном сжатии картинок PGN с прозрачностью - этот способ с моей точки зрения больших затрат времени не потребует.


(Теоретически этот глюк gd может проявляться не только на png, но и на jpeg на однородном фоне, но я у себя лично такого не видел).


Ссылки:

https://dev.1c-bitrix.ru/api_help/main/reference/cfile/resizeimageget.php

https://dev.1c-bitrix.ru/support/forum/forum6/topic73615/


фото
1

Спасибо за вовлеченность в обсуждение. Ваши предложения нужно оценивать и тестировать. Проверим и найдем лучший способ решения задачи.

фото
Комментировать
 
Прикрепить файлы