Преобразование цветового пространства JPEG (Adobe RGB в sRGB) в Windows (.Net)
-
19-09-2019 - |
Вопрос
Мне нужно создать миниатюры и изображения среднего размера из больших фотографий.Эти фотографии меньшего размера предназначены для показа в онлайн-галерее.Многие фотографы отправляют изображения в формате JPEG с использованием Adobe RGB.Я хотел бы использовать sRGB для всех миниатюр и изображений среднего размера.
Я использую dotnet (asp.net), и мне нужен способ конвертировать Adobe RGB в sRGB без потери качества.
Решение
Справочная информация:Файлы Jpg содержат 8 бит красного, зеленого и синего цветов, будь то sRGB, Adobe RGB или обычный RGB.Дескриптор ICC определяет цветовое пространство.Иногда это встроено в файл jpg.Иногда встречается флаг для обозначения sRGB, тег Exif Colorspace a001=1.Стандартного флага для Adobe RGB не существует, но некоторые приложения и камеры используют 65535 (некалиброванный) для Adobe RGB в теге exif A001.
Чтобы преобразовать файл jpg из одного профиля ICC (цветового пространства) в другой, вы можете использовать CreateColorTransform для создания преобразования между цветовыми пространствами.Вам потребуется предоставить профиль ICC для исходного (Adobe RGB) и целевого (sRGB) цветовых пространств.
После преобразования используйте TranslateBitmapBits для настройки пикселей.Возможно, будет проще работать с изображением как с DIBSection.
Это может быть немного сложно записать в .asp, поэтому, возможно, будет проще использовать графическую библиотеку, которая делает это.
Другие советы
Взгляни на Класс ColorConvertedBitmap.
Вам следует использовать ImageMagic -профиль вариант, я считаю, что параметр -colorspace вам здесь не поможет.
convert image.jpg -profile sRGB.icc rgb_image.jpg
Альтернативно вы можете поискать небольшой механизм управления цветом
Посмотри на Классы преобразования растровых изображений в котором есть краткий пример использования класса ColorconvertedBitmap с профилем.
На стороне сервера вы можете обратиться к ImageMagick и позволить ему выполнить преобразование за вас.
Вот ссылка на параметр командной строки -colorspace
Я не использовал этот конкретный вариант, но, похоже, он делает то, что вы хотите.