Является ли ваше изображение 8-битным (индексированный цвет)?При изменении размера 8-битных изображений они часто преобразуются из индексированного цвета в RGB, чтобы результат выглядел более плавным.Изменение размера изображения без изменения таблицы цветов редко заканчивается хорошо.
Если изображение уже RGB (24-разрядное или более), это немного сложнее: что нужно сделать изменяющему размер для краев изображения, награница между «прозрачным» и «непрозрачным»?Многие алгоритмы изменения размера будут делать что-то похожее на «усреднение двух цветов» на границе (опять же, чтобы изображение выглядело более плавным), но большинство не имеют понятия прозрачности, не говоря уже о способности PNG иметь несколько уровней прозрачности.
Итак, краткий ответ «это, вероятно, ошибка» - не полная реализация функций PNG.
Решение может не существовать, но я бы попробовал:
- Оставайтесь в 8-битном цвете, если это возможно, или преобразуйте заранее в 32-битный.
- Получите цвет или индекс цвета прозрачного цвета.После изменения размера сделайте это значение прозрачным.Обратите внимание, что из-за вышеупомянутого «сглаживания» края между прозрачным и непрозрачным могут не быть этого цвета и, вероятно, будут выглядеть как смесь черного и любого другого цвета, который вам действительно нужен.
- Если ничего другого,вам может понадобиться использовать внешнюю библиотеку, которая дает вам больше контроля.