Преобразование цветового пространства JPEG (Adobe RGB в sRGB) в Windows (.Net)

StackOverflow https://stackoverflow.com/questions/1174832

  •  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

Я не использовал этот конкретный вариант, но, похоже, он делает то, что вы хотите.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top