`
xianxin88
  • 浏览: 41476 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

关于Java生成背景透明的png图片

    博客分类:
  • Java
阅读更多

最近用到Java动态生成背景透明的图片功能,从gif和png中选择了png格式,个中缘由就不说了,于是动手到网上搜索有用的代码。现把搜索结果总结如下:

1. 生成png图片

int width = 400;
int height = 300;
// 创建BufferedImage对象
BufferedImage image = new BufferedImage(width, height,     BufferedImage.TYPE_INT_RGB);
// 获取Graphics2D
Graphics2D g2d = image.createGraphics();
// 画图
g2d.setColor(new Color(255,0,0));
g2d.setStroke(new BasicStroke(1));
g2d.draw
//释放对象
g2d.dispose();
// 保存文件    
ImageIO.write(image, "png", new File("c:/test.png"));

 

  这只是绘制图形的代码,其背景是黑色的,如何才能背景透明呢?继续搜索,没有得到结果,不过搜出以下代码,它只是把自己绘制的图形设置为透明或半透明,背景并不透明,如下:

2. 绘制半透明图形

new BufferedImage(width, height,     BufferedImage.TYPE_INT_RGB);
// 获取Graphics2D
Graphics2D g2d = image.createGraphics();
// 设置透明度
g2d.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_ATOP, 1.0f));  // 1.0f为透明度 ,值从0-1.0,依次变得不透明

// 画图
g2d.setColor(new Color(255,0,0));
g2d.setStroke(new BasicStroke(1));
g2d.draw
//释放对象

//透明度设置 结束 
g2d.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVER));  

g2d.dispose();
// 保存文件    
ImageIO.write(image, "png", new File("c:/test.png"));

 这样绘制的图形应该说是前景透明的,背景依然是黑色,:(

 

网上没有看到有益的代码,在csdn上一位说自己实现了,但却没有说怎么实现的,没办法只能自己摸索了,耗了半个多小时,几乎查看了BufferedImage 和Graphics2D 所有方法和属性,终于找到了解决方案,只不过是增加两行代码而已,如下:

int width = 400;
int height = 300;
// 创建BufferedImage对象
BufferedImage image = new BufferedImage(width, height,     BufferedImage.TYPE_INT_RGB);
// 获取Graphics2D
Graphics2D g2d = image.createGraphics();

// ----------  增加下面的代码使得背景透明  -----------------
image = g2d.getDeviceConfiguration().createCompatibleImage(width, height, Transparency.TRANSLUCENT);
g2d.dispose();
g2d = image.createGraphics();
// ----------  背景透明代码结束  -----------------


// 画图
g2d.setColor(new Color(255,0,0));
g2d.setStroke(new BasicStroke(1));
g2d.draw
//释放对象
g2d.dispose();
// 保存文件    
ImageIO.write(image, "png", new File("c:/test.png"));

 

 

自己写的....

// 获取水印原图
String temp = request.getSession().getServletContext().getRealPath("");
String filePath = temp + waterImg;
targetImg = temp + targetImg;
			
// 水印文件
ImageIcon imgIcon = new ImageIcon(filePath);
Image theImg = imgIcon.getImage();
int width = theImg.getWidth(null);
int height = theImg.getHeight(null);
			
// 目标文件
File _file = new File(targetImg);
if(_file.exists()) {
        _file.delete();
        _file.createNewFile();
} else {
       _file.createNewFile();
}
            
BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
Graphics2D g2d = image.createGraphics();
 // ----------   增加下面的代码使得背景透明   -----------------
image = g2d.getDeviceConfiguration().createCompatibleImage(width, height, Transparency.TRANSLUCENT);
g2d.dispose();
g2d = image.createGraphics();
            
g2d.setColor(new Color(255,0,0));
g2d.setStroke(new BasicStroke(1));
            
g2d.setColor(Color.white);
g2d.drawImage(theImg, 0, 0, null);
g2d.setFont(new Font("宋体", Font.BOLD, 12)); // 第二个参数更改粗斜体...粗体和斜体(Font.BOLD|Font.ITALIC)
g2d.drawString(markContent, width / 8, height / 2); // 添加水印的文字和设置水印文字出现的内容
            
g2d.dispose();
ImageIO.write(image, "png", _file);
// ----------   背景透明代码结束   -----------------

 

分享到:
评论
2 楼 zph999 2011-07-06  
damoo 写道
不错,看了你的也解决了我的问题。
谢谢。

例子能透明吗?我测试怎么不行啊?
1 楼 damoo 2011-07-06  
不错,看了你的也解决了我的问题。
谢谢。

相关推荐

    java对图片改变大小,png防止变黑,加圆角 圆角外透明

    当处理PNG图片时,尤其是透明PNG,需要特别注意保持其透明特性。使用`ColorModel`和`Raster`可以保留Alpha通道(透明度通道)。确保在缩放或处理过程中,透明像素不会被错误地填充为黑色。 4. **创建圆角效果**: ...

    java生成透明图片

    在Java编程语言中,生成透明图片涉及到图像处理和颜色模型的知识。Java提供了丰富的API来处理图像,例如在`java.awt`和`javax.imageio`包中。本文将深入探讨如何在Java中创建并保存带有透明度的PNG或GIF图片。 首先...

    java 生成图片

    在Java编程语言中,生成图片是一项常见的任务,尤其在数据可视化、报告生成或者网页动态内容制作等场景。这里我们将深入探讨如何使用Java根据配置文件批量生成图片。 首先,要生成图片,我们需要理解Java中的图像...

    java动态生成图片 并把当前时间写在图片上

    Java动态生成图片并把当前时间写在图片上是一项常见的需求,比如用于生成验证码、日志记录或者自定义的报告。这个任务涉及到Java图形处理、日期时间处理以及IO操作等多个方面。下面将详细介绍如何实现这个功能。 ...

    java生成的二维码图片

    Java生成的二维码图片是一种常见的数据编码方式,尤其在移动支付、信息分享等领域广泛应用。QRcode,全称为Quick Response Code(快速响应码),是由日本Denso Wave公司发明的一种二维条形码,可以存储大量的文本、...

    java生成1000张图片,分别在每张图片上写阿拉伯数字1~1000

    // 保存为PNG图片 } catch (IOException e) { e.printStackTrace(); } } ``` 为了生成1到1000的图片,我们可以将这个方法放入一个循环中,如下所示: ```java for (int i = 1; i ; i++) { createImage(i); } ...

    批量去除png透明区域,并生成配置文件

    总的来说,“批量去除png透明区域”工具是一款实用的图像处理软件,它通过自动化的方式解决了大量PNG图片背景处理的问题,提高了工作效率,同时配置文件功能提供了操作的便利性和一致性。在日常的图形设计、网页制作...

    java实现多张png,jpg等各种图片文件转动态gif图

    在Java编程环境中,将多张PNG、JPG等格式的静态图片转换为动态GIF图像是一项常见的需求。这个过程涉及到图像处理和动画制作的技术。在本文中,我们将深入探讨如何利用Java来实现这一功能,同时关注如何设置各种参数...

    java:将html生成图片的所有方法比较

    在Java开发中,将HTML转换为图片是一种常见的需求,例如用于网页截图、报表生成或邮件模板预览。本文将深入探讨几种不同的方法,分析它们的优缺点,以帮助开发者选择最适合项目需求的解决方案。 1. **Java2DPDF库转...

    java生成图片验证码

    首先,我们来看标题"java生成图片验证码"。这个标题暗示我们将探讨的是在Java环境中生成随机的、可读性较差的文本,并将其转化为图像的过程,以创建一个验证码。验证码通常由字母、数字或两者混合组成,设计的目的...

    java多张图片重叠。包括透明图片

    本示例探讨了如何将多张图片重叠在一起,包括处理透明度,特别是PNG等支持透明度的图像格式。这是一个关键的图像处理技术,因为可以创建复杂的视觉效果或者进行图像合成。 首先,我们需要引入Java的`javax.imageio`...

    java 生成二维码 且中间 带图片(logo) 的方法

    最后,将结果保存为PNG图片。 在运行这段代码之前,请确保已经将`logoPath`替换为你的logo图片的绝对路径,并指定好输出的二维码图片路径(`qrCodePath`)。执行后,将在指定路径生成一个带有logo的二维码图片。 ...

    java生成微信小程序分享图海报图的全过程 可作为util直接使用

    总结,通过以上步骤,我们可以使用Java实现一个功能完备的小程序海报图和分享图生成工具,它能够处理各种图像元素,进行精确的布局和文字排版,同时解决PNG图像的透明度问题,确保在微信小程序环境中呈现出高质量的...

    java生成推广二维码

    在这个“java生成推广二维码”的项目中,我们主要探讨的是如何使用Java来创建具有美化效果和推广功能的二维码。 首先,我们需要了解二维码的基本原理。二维码(Quick Response Code)是一种二维条形码,能够存储...

    java jsp根据不同的IP生成不同的图片 背景为同一张图片 个性签名.rar

    在这个特定的项目中,“java jsp根据不同的IP生成不同的图片 背景为同一张图片 个性签名.rar”是一个实践案例,它涉及到了动态生成个性化图片的技术。以下将详细解析这个项目的知识点: 1. **IP地址获取**:首先,...

    JAVA生成二维码,图片合成,图片添加文字对应资源和代码

    例如,`99999.png`可能是一个已经生成的二维码,而`background.png`可能是作为合成背景的图片。 3. **生成二维码**: 使用ZXing库生成二维码的基本步骤包括创建`MultiFormatWriter`实例,选择合适的编码格式(如`...

    java 后台 生成的表格通过HtmlImageGenerator(Html2Image) 生成图片

    Java 后台生成的表格通常用于数据展示,但有时我们需要将这些动态生成的表格转换为图片格式,以便于分享、打印或保存。这就涉及到一个工具——HtmlImageGenerator,也称为Html2Image。这个工具能够将HTML页面转化为...

    java生成二维码demo

    本示例“java生成二维码demo”就是这样一个案例,它演示了如何在Java环境下创建包含图片和参数的二维码。 首先,生成二维码的核心库通常是`com.google.zxing`,这是一个开源的条码和二维码处理库。在Java中,我们...

    Java生成物流打印单(条形码,二维码)

    在Java编程环境中,生成物流打印单是常见的任务之一,尤其对于电商或物流公司而言。这个过程通常涉及到条形码和二维码的生成,以便于快速准确地识别包裹信息。在这个项目中,开发者利用了Java的Graphics2D图形库以及...

    java生成验证码demo

    这个"java生成验证码demo"提供了生成自定义验证码图片的方法,包括设置图片尺寸、验证码长度,以及添加各种视觉混淆元素,以增加机器识别的难度。 首先,我们要理解验证码的基本原理。它通常由一组随机生成的字母或...

Global site tag (gtag.js) - Google Analytics