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"));

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. 绘制半透明图形

int width = 400;

int height = 300;

// 创建BufferedImage对象

BufferedImage image = 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"));

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

查看了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"));

================================================

白背景变透明

package com.goldgrid.socket.client;

import java.awt.Graphics2D;
import java.awt.Image;
import java.awt.image.BufferedImage;
import java.io.ByteArrayOutputStream;
import java.io.File;

import javax.imageio.ImageIO;
import javax.swing.ImageIcon;

import org.apache.log4j.Logger;

public class Alpha {

protected static Logger logger = Logger.getLogger(ClientSocket.class);

public byte[] transferAlpha(Image image) {

ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();

try {
    ImageIcon imageIcon = new ImageIcon(image);
    BufferedImage bufferedImage = new BufferedImage(imageIcon
      .getIconWidth(), imageIcon.getIconHeight(),
      BufferedImage.TYPE_4BYTE_ABGR);
    Graphics2D g2D = (Graphics2D) bufferedImage.getGraphics();
    g2D.drawImage(imageIcon.getImage(), 0, 0, imageIcon
      .getImageObserver());
    int alpha = 0;
    for (int j1 = bufferedImage.getMinY(); j1 < bufferedImage
      .getHeight(); j1++) {
     for (int j2 = bufferedImage.getMinX(); j2 < bufferedImage
       .getWidth(); j2++) {
      int rgb = bufferedImage.getRGB(j2, j1);
   
      int R =(rgb & 0xff0000 ) >> 16 ;
      int G= (rgb & 0xff00 ) >> 8 ;
      int B= (rgb & 0xff );
      if(((255-R)<30) && ((255-G)<30) && ((255-B)<30)){
       rgb = ((alpha + 1) << 24) | (rgb & 0x00ffffff);
      }

bufferedImage.setRGB(j2, j1, rgb);

}
    }

g2D.drawImage(bufferedImage, 0, 0, imageIcon.getImageObserver());
    //ImageIO.write(bufferedImage, "png", new File("d:/test.png.png"));

ImageIO.write(bufferedImage, "png", byteArrayOutputStream);
   } catch (Exception e) {
    logger.error(e.toString());
   }finally{
  
   }

return byteArrayOutputStream.toByteArray();

}
}

java 创建PNG格式的透明背景的图片相关推荐

  1. 为什么存png还有白色底_用photoshop保存透明背景的图片为png格式,为什么打开后是白色背景了?...

    Photoshop想要保存透2113明背景的图片要保存PNG格式,保存JPG格式就5261会变成图片.41021.电脑打开Photoshop.2.打1653开Photoshop后,打开一张图片.3.打 ...

  2. 用Ps将PSD切片并将切片保存为透明背景的图片

    第一步:选择放大镜工具或者Ctrl++将要切片的部分放大. 第二步:选择移动工具单击要切片的部分,在右边的图层栏找到要切片的图层在文字上右键选择转换为智能对象,再右键该图层的文字选择栅格化图层. 第三 ...

  3. Graphics2D 在一张图片上添加一个带有透明背景的图片或绘制透明图片

    目录 代码实例 代码实例 // 读取原图片信息 底图//得到文件File file = new File("d:\\1.png");//文件转化为图片Image srcImg = ...

  4. java编写的网页版 纯色背景图片去除底色工具,变成透明背景的图片工具发布...

    程序使用java语言编写,工作原理是取图片边缘的像素点作为要替换的背景色,然后将所有像素点与该颜色进行比较,发现相同则将颜色不透明度设置为0,使颜色完全透明. 下面是一个在线版: 一.访问图片去底工具 ...

  5. java 显示透明背景png图片

    首先理由ps生成一个背景透明的png图片,然后设置JPanel面板的透明属性,也就是panel.setOpaque(false);设置为透明 class MyPanel extends JLayere ...

  6. php 网页 透明背景图片,php 处理透明背景的图片时的问题

    PHP图象处理之透明背景的gif和png图片的一些问题 1,直接读取有透明背景的PNG格式文件,然后直接输出,背景变成了黑色,gif则没有这种情况. 解决方法:使用 imagesavealpha ($ ...

  7. php 去掉图片背景透明背景图片,php 处理透明背景的图片时的问题

    PHP图象处理之透明背景的gif和png图片的一些问题 1,直接读取有透明背景的PNG格式文件,然后直接输出,背景变成了黑色,gif则没有这种情况. 解决方法:使用 imagesavealpha ($ ...

  8. 手写签名更改为透明背景png图片

    有时候我们需要将手写签名转换为透明背景的png图片来使用,作为非专业的ui,我们该怎么做呢? 结合wps和ps,转换就变得十分简单.祥看下面的操作步骤: 1. 将图片导入wps 2.选中图片,选择色彩 ...

  9. 如何在Matlab中得到透明背景的图片?

    2005-11-10 MATLAB输出的矢量图往往不是透明背景的,这样插在ppt中就会很难看,就像贴了膏药似的.关于在MATLAB中如何得到透明背景的矢量图,我有个经验就是:用MATLAB导出pdf图 ...

最新文章

  1. 2022-2028年中国塑料管的制造行业市场需求预测及投资策略研究报告
  2. Pandas | 5 种技巧高效利用value-counts
  3. git钩子放服务器_服务器git钩子
  4. 现在企业会要求JAVA人员会怎样的技术呢?
  5. 带有生命的电子器件模型
  6. dlt645 保电 合闸_DLT645-2007简单整理
  7. 【内有网易黑猪肉券福利】网易MCTalk首秀——在线教育是一场马拉松
  8. 第五章:系统困境之 你的努力忽略了关键限制因素
  9. 【期望】期望收益(金牌导航 期望-3)
  10. 图像配准之特征点匹配的思考
  11. krpano使用总结-地图路线
  12. 一起啃PRML - 1.2.1 Probability densities 概率密度
  13. H3C 静态路由的配置
  14. opencv 学习之 亮度检测
  15. 适于硬件实现的中值滤波算法
  16. 群晖Docker部署Calibre Web打造全功能书库
  17. book mac pro怎么重装系统_苹果13英寸新MacBook Pro怎么重装win7系统
  18. 26.时空跳跃者的魔法
  19. 无线模块数据加密,反码校验,发送字符串ABCDEFGHIJKLMNOP LED频闪
  20. 天龙八部TLBB系列 - 网单服务端各目录文件说明【超详细】

热门文章

  1. mysql数据库不耀华答案_MySQL数据库应用与实践教程
  2. 黑域傻瓜启动器使用教程_使用相对安全性保存密码[傻瓜指南]
  3. 钛资本研究院:一文读懂5G发展现状及创业投资机会
  4. 虚拟机群晖找不到服务器,ESXI6.0安装群晖6.2,解决搜索不到IP问题。禁止转载
  5. 论文撰写的学习(一):标题的撰写
  6. 第二次创客沙龙暨平台联合探讨会PPT-18.5.12
  7. 请简述android的生命周期,简述Android Activity的生命周期
  8. 我的第一个Hybrid APP的心得
  9. Log4qt使用记录备忘
  10. C++57个入门知识点_50 菱形继承与虚继承(C++中语法允许多重继承造成菱形继承;会造成近亲结婚的问题;可以通过虚继承的方式解决;实际项目中不多用多重继承)