Java изменить цвет фона PNG изображения - PullRequest
0 голосов
/ 03 апреля 2020

Я следовал за некоторыми ссылками StackOverflow, используя Graphics2D, чтобы изменить цвет фона BufferedImage.

Проект, над которым я работаю, требует, чтобы я прочитал изображение в формате png с данного URL; Полученное png-изображение имеет прозрачный фон, и я хотел бы установить его на белый.

Вот что у меня есть:

String u = this.format() ;
        BufferedImage image = null ;
        try{
            URL url = new URL(u) ;
            image = ImageIO.read(url) ;
            Graphics2D graphics = image.createGraphics() ;
            graphics.setBackground(Color.WHITE) ;
            graphics.clearRect(0, 0, image.getWidth(), image.getHeight()) ;


            ImageIO.write(image, "png", new File(outPath + fileName)) ;
            graphics.dispose() ;

        }
        catch(IOException e){
            e.printStackTrace() ;
        }

Проблема, с которой я сталкиваюсь, заключается в том, что когда я просмотреть изображение, изображение отображается в виде solid белого поля. Видимо, я наложил белый фон поверх существующего изображения, которое я получил.

Как сохранить исходное изображение и изменить только фон? Или сначала установить фон, а затем наложить полученное изображение?

1 Ответ

1 голос
/ 03 апреля 2020

1 - загрузите ваше изображение

image = ImageIO.read(url) ;

2 - создайте новый BufferedImage того же размера

BufferedImage background = new BufferedImage(image.getWidth(), image.getHeight, BufferedImage.TYPE_INT_RGB);

3 - заполните background нужным цветом

Graphics2D g2d = background.createGraphics();
g2d.setColor(Color.WHITE);
g2d.fillRect(0, 0, background.getWidth(), background.getHeight());

4- Нарисуйте исходное изображение на фоне ...

g2d.drawImage(image, 0, 0, null);
g2d.dispose();

background теперь заполнено желаемым цветом и поверх него нарисовано изображение.

...