1. package utils;
  2.  
  3. import java.awt.Graphics2D;
  4. import java.awt.image.BufferedImage;
  5. import java.io.File;
  6.  
  7. import javax.imageio.ImageIO;
  8. import javax.swing.ImageIcon;
  9.  
  10. public class TestMainPNG{
  11.  
  12. public static void main(String[] args) throws Exception{
  13. BufferedImage image = ImageIO.read(new File("C:/Users/grand/Desktop/lanzhou.jpg"));
  14. // 高度和宽度
  15. int height = image.getHeight();
  16. int width = image.getWidth();
  17.  
  18. // 生产背景透明和内容透明的图片
  19. ImageIcon imageIcon = new ImageIcon(image);
  20. BufferedImage bufferedImage = new BufferedImage(width, height, BufferedImage.TYPE_4BYTE_ABGR);
  21. Graphics2D g2D = (Graphics2D) bufferedImage.getGraphics(); // 获取画笔
  22. g2D.drawImage(imageIcon.getImage(), 0, 0, null); // 绘制Image的图片,使用了imageIcon.getImage(),目的就是得到image,直接使用image就可以的
  23.  
  24. int alpha = 0; // 图片透明度
  25. // 外层遍历是Y轴的像素
  26. for (int y = bufferedImage.getMinY(); y < bufferedImage.getHeight(); y++) {
  27. // 内层遍历是X轴的像素
  28. for (int x = bufferedImage.getMinX(); x < bufferedImage.getWidth(); x++) {
  29. int rgb = bufferedImage.getRGB(x, y);
  30. // 对当前颜色判断是否在指定区间内
  31. if (colorInRange(rgb)){
  32. alpha = 0;
  33. }else{
  34. // 设置为不透明
  35. alpha = 255;
  36. }
  37. // #AARRGGBB 最前两位为透明度
  38. rgb = (alpha << 24) | (rgb & 0x00ffffff);
  39. bufferedImage.setRGB(x, y, rgb);
  40. }
  41. }
  42. // 绘制设置了RGB的新图片,这一步感觉不用也可以只是透明地方的深浅有变化而已,就像蒙了两层的感觉
  43. g2D.drawImage(bufferedImage, 0, 0, null);
  44.  
  45. // 生成图片为PNG
  46. ImageIO.write(bufferedImage, "png", new File("C:/Users/grand/Desktop/lanzhou.png"));
  47. MyLogger.logger.info("完成画图");
  48. }
  49.  
  50. // 判断是背景还是内容
  51. public static boolean colorInRange(int color) {
  52. int red = (color & 0xff0000) >> 16;// 获取color(RGB)中R位
  53. int green = (color & 0x00ff00) >> 8;// 获取color(RGB)中G位
  54. int blue = (color & 0x0000ff);// 获取color(RGB)中B位
  55. // 通过RGB三分量来判断当前颜色是否在指定的颜色区间内
  56. if (red >= color_range && green >= color_range && blue >= color_range){
  57. return true;
  58. };
  59. return false;
  60. }
  61.  
  62. //色差范围0~255
  63. public static int color_range = 210;
  64.  
  65. }

说明:左边图片是白色的底,右边图片是透明的底。

个人感觉:使用画笔操作的是画中的内容,透明化是对画布的操作而不是内容的操作。

java对图片进行透明化处理的更多相关文章

  1. 对图片进行透明化处理-使用java程序

    因需要将一张白色背景图片处理为透明色,因此上网上搜了搜处理方案,可以通过ps,和美图秀秀,但是我电脑上并没有这两个软件,下载安装太耗时.从网上搜了搜发现原来可以使用java代码进行处理,代码如下: i ...

  2. java对图片进行操作,仅仅是小demo

    package com.cy.thumb; import java.awt.Rectangle; import java.awt.image.BufferedImage; import java.io ...

  3. 基于Java对图片进行二值化处理

    一直以来对Java的图形处理能力表无力,但好像又不是那么一回事,之前用PHP做过一些应用,涉及到验证码的识别,其中有个图片二值化的步骤,今天换成Java来实现下 在java的扩展包javax.imag ...

  4. JAVA爬虫---验证码识别技术(一)

    Python中有专门的图像处理技术比如说PIL,可以对验证码一类的图片进行二值化处理,然后对图片进行分割,进行像素点比较得到图片中的数字.这种方案对验证码的处理相对较少,运用相对普遍,很多验证码图片可 ...

  5. Spark案例分析

    一.需求:计算网页访问量前三名 import org.apache.spark.rdd.RDD import org.apache.spark.{SparkConf, SparkContext} /* ...

  6. 《转》使用JAVA如何对图片进行格式检查以及安全检查处理

    本文出自冯立彬的博客,原地址:http://www.fenglibin.com/use_java_to_check_images_type_and_security.html 一.通常情况下,验证一个 ...

  7. 一个在java后台实现的对图片进行加网纹或水印的工具类

    import java.awt.AlphaComposite; import java.awt.Color; import java.awt.Font; import java.awt.Graphic ...

  8. 使用JAVA如何对图片进行格式检查以及安全检查处理

    一.通常情况下,验证一个文件是否图片,可以通过以下三种方式: 1).判断文件的扩展名是否是要求的图片扩展名 这种判断是用得比较多的一种方式,不过这种方式非常的不妥,别人稍微的把一个不是图片的文件的扩展 ...

  9. Java新人学习(li)

    一.项目中搭配使用SVN和Git 安装SVN:安装熟悉Git:安装maven,修改setting.xml文件:安装eclipse,配置jdk.maven路径: 建立自己的Git仓库,熟悉常用的Git命 ...

随机推荐

  1. HDU 1024(新最大子序列和 DP)

    题意是要在一段数列中求 m 段互不重合的子数列的最大和. 动态规划,用数组 num[ ] 存储所给数列,建二维数组 dp[ ][ ] , dp[ i ][ j ] 表示当选择了第 j 个数字( num ...

  2. Golang入门教程(七)基本数据类型使用案例

    18种基本数据类型使用 代码案例1 package main import "fmt" func main() { //使用 var 定义一个布尔类型并且初始化 var flag ...

  3. Docker 从入门到放弃(三)镜像使用

    当运行容器时,使用的镜像如果在本地中不存在,docker 就会自动从 docker 镜像仓库中下载,默认是从 Docker Hub 公共镜像源下载. 下面我们来学习: 1.管理和使用本地 Docker ...

  4. 转--select/poll/epoll到底是什么一回事

    面试题:说说select/poll/epoll的区别. 这是面试后台开发时的高频面试题,属于网络编程和IO那一块的知识.Android里面的Handler消息处理机制的底层实现就用到了epoll. 为 ...

  5. fastJson--json与java格式的转换

    fastJson--json与java格式的转换: /* * alibaba提供的fastJson:用法: */ @Test public void testJson() { User user = ...

  6. cookie与session的区别与关系

    cookie与session的区别 1. 存储位置不同 cookie存储在浏览器中 session存储在服务端里 2. 大小不同 cookie最大4K session由于是存在服务端,因此理论上没有大 ...

  7. C# using 的用法

    Ø  前言 说起 C# using 语句,想必大家都不陌生,它是 C# 中关键字之一.我们基本每天写代码都会使用到,其实也非常简单. 1.   首先,说说 using 有哪些用途 1)   用于引用其 ...

  8. IEEE LaTeX模板使用BibTeX

    IEEE LaTeX 模板使用 BibTeX 在Google Scholar获得的文献引用格式一般是BibTex的,而IEEE Transactions的模板默认用的是BibItem.目前没有什么自动 ...

  9. 隐马尔可夫模型HMM(一)

    摘自 1.李航的<统计学习方法> 2.https://www.cnblogs.com/pinard/p/6945257.html 了解HMM模型 1.隐马尔可夫模型的定义 隐马尔可夫模型是 ...

  10. Debian Security Advisory(Debian安全报告) DSA-4414-1 libapache2-mod-auth-mellon security update

    Debian Security Advisory(Debian安全报告) DSA-4414-1 libapache2-mod-auth-mellon security update Package:l ...