Za boha nemůžu rozchodit průhlednost u kládaného vodoznaku.

Na googlu jsem našel spousty příkladů a vytvořil jsem si následující statickou metodu:

private static void createWaterMark(BufferedImage img, BufferedImage watermark, float alpha, float percentSize,
                        int border) {

                int newWatWidth = Math.round(percentSize * img.getWidth());
int newWatHeight = Math.round((newWatWidth / (1.0f * watermark.getWidth())) * watermark.getHeight());

                int watOffsetX = img.getWidth() - newWatWidth - border;
                int watOffsetY = img.getHeight() - newWatHeight - border;

BufferedImage resizedThumbnail = new BufferedImage(newWatWidth, newWatHeight, BufferedImage.TYPE_INT_RGB);
                Graphics2D graphics2D = resizedThumbnail.createGraphics();
graphics2D.setRenderingHint(RenderingHints.KEY_INTERPOLATION, RenderingHints.VALUE_INTERPOLATION_BILINEAR);
                graphics2D.drawImage(watermark, 0, 0, newWatWidth, 
newWatHeight, null);
                Graphics2D g = img.createGraphics();
g.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVER, alpha));
                g.drawImage(resizedThumbnail, watOffsetX, watOffsetY, null);
                
                resizedThumbnail.flush();       
                g.dispose();            
        }

klíčová pro průhlednost je řádka g.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVER, alpha));

kde se pomocí AlphaComposite nastavuje způsob interakce barvy původního pixelu obrázku s barvou pixelu vkládaného obrázku (vodoznaku).

Problém je, že se kýžená průhlednost nedostavuje - průhledné pixely se zobrazí černou barvou.

Děkuji za rady.

Odpovedet emailem