Применение альфа-путей к изображениям в java

Я хочу применить альфа-маску, которая есть в данных изображения. У меня есть изображения разных форматов, а именно tiffs, PSD PNG и jpeg. Я читаю их как буферизованные изображения и хочу использовать библиотеку Twelvemonkeys, чтобы настроить альфа-пути в изображениях и соответствующим образом применить транспарант. Но я не могу найти соответствующие функции. Пожалуйста помоги.

ImageInputStream stream = ImageIO.createImageInputStream(new File(c:/img.psd);
BufferedImage image = Paths.readClipped(stream);
image.getcoclormodel().hasAlpha(); 

for(i < image.getwidth()) {
   for(j < image.getHeight()) {
       pixels = image.getRGB(i, j, width, height, null, 0, width);
       Color col = new Color(pixels[pixelIndex]);
       int p = col.getAlpha() 
       image.setRGB(i, j, width, height, p, 0, width)
    }
}

person sogytots    schedule 15.07.2020    source источник
comment
Привет, интересно, возможно, это может быть интересно stackoverflow.com/questions/221830/   -  person IronMan    schedule 15.07.2020
comment
Мне нужны альфа-каналы, которые настроены в изображениях фотошопа и других изображениях tiff, а затем я хочу применить их, чтобы получить новое буферное изображение.   -  person sogytots    schedule 16.07.2020


Ответы (1)


Использование метода Paths.readClipped(...) будет считывать данные изображения и ресурс обтравочного контура Photoshop и применять обтравочный контур к изображению. Другими словами, результирующий BufferedImage будет содержать прозрачность согласно пути.

Если вы предпочитаете читать путь и изображение отдельно, вы можете использовать методы readPath(...) и applyClippingPath(...) служебного класса Paths:

try (ImageInputStream stream = ImageIO.createImageInputStream(new File("image_with_path.jpg")) {
    Shape clip = Paths.readPath(stream);
    stream.seek(0);
    BufferedImage image = ImageIO.read(stream);

    if (clip != null) {
        image = Paths.applyClippingPath(clip, image);
    }

    // Do something with the clipped image...
}

Приведенный выше код в основном делает то же самое, что и readClipped(...), но позволяет вам проверять и изменять каждый шаг.

PS: Обратите внимание, что методы в Paths предназначены для использования только с изображениями, содержащими блоки ресурсов Photoshop с ресурсами ClippingPath (идентификатор ресурса 0x07d0). Альфа-канал изображения будет всегда. Для файлов PSD и TIFF, содержащих несколько альфа-каналов (также называемых масками прозрачности), в настоящее время нет возможности получить доступ к дополнительным альфа-каналам.

person Harald K    schedule 06.08.2020