java对图片进行透明化处理
- package utils;
- import java.awt.Graphics2D;
- import java.awt.image.BufferedImage;
- import java.io.File;
- import javax.imageio.ImageIO;
- import javax.swing.ImageIcon;
- public class TestMainPNG{
- public static void main(String[] args) throws Exception{
- BufferedImage image = ImageIO.read(new File("C:/Users/grand/Desktop/lanzhou.jpg"));
- // 高度和宽度
- int height = image.getHeight();
- int width = image.getWidth();
- // 生产背景透明和内容透明的图片
- ImageIcon imageIcon = new ImageIcon(image);
- BufferedImage bufferedImage = new BufferedImage(width, height, BufferedImage.TYPE_4BYTE_ABGR);
- Graphics2D g2D = (Graphics2D) bufferedImage.getGraphics(); // 获取画笔
- g2D.drawImage(imageIcon.getImage(), 0, 0, null); // 绘制Image的图片,使用了imageIcon.getImage(),目的就是得到image,直接使用image就可以的
- int alpha = 0; // 图片透明度
- // 外层遍历是Y轴的像素
- for (int y = bufferedImage.getMinY(); y < bufferedImage.getHeight(); y++) {
- // 内层遍历是X轴的像素
- for (int x = bufferedImage.getMinX(); x < bufferedImage.getWidth(); x++) {
- int rgb = bufferedImage.getRGB(x, y);
- // 对当前颜色判断是否在指定区间内
- if (colorInRange(rgb)){
- alpha = 0;
- }else{
- // 设置为不透明
- alpha = 255;
- }
- // #AARRGGBB 最前两位为透明度
- rgb = (alpha << 24) | (rgb & 0x00ffffff);
- bufferedImage.setRGB(x, y, rgb);
- }
- }
- // 绘制设置了RGB的新图片,这一步感觉不用也可以只是透明地方的深浅有变化而已,就像蒙了两层的感觉
- g2D.drawImage(bufferedImage, 0, 0, null);
- // 生成图片为PNG
- ImageIO.write(bufferedImage, "png", new File("C:/Users/grand/Desktop/lanzhou.png"));
- MyLogger.logger.info("完成画图");
- }
- // 判断是背景还是内容
- public static boolean colorInRange(int color) {
- int red = (color & 0xff0000) >> 16;// 获取color(RGB)中R位
- int green = (color & 0x00ff00) >> 8;// 获取color(RGB)中G位
- int blue = (color & 0x0000ff);// 获取color(RGB)中B位
- // 通过RGB三分量来判断当前颜色是否在指定的颜色区间内
- if (red >= color_range && green >= color_range && blue >= color_range){
- return true;
- };
- return false;
- }
- //色差范围0~255
- public static int color_range = 210;
- }
说明:左边图片是白色的底,右边图片是透明的底。
个人感觉:使用画笔操作的是画中的内容,透明化是对画布的操作而不是内容的操作。
java对图片进行透明化处理的更多相关文章
- 对图片进行透明化处理-使用java程序
因需要将一张白色背景图片处理为透明色,因此上网上搜了搜处理方案,可以通过ps,和美图秀秀,但是我电脑上并没有这两个软件,下载安装太耗时.从网上搜了搜发现原来可以使用java代码进行处理,代码如下: i ...
- java对图片进行操作,仅仅是小demo
package com.cy.thumb; import java.awt.Rectangle; import java.awt.image.BufferedImage; import java.io ...
- 基于Java对图片进行二值化处理
一直以来对Java的图形处理能力表无力,但好像又不是那么一回事,之前用PHP做过一些应用,涉及到验证码的识别,其中有个图片二值化的步骤,今天换成Java来实现下 在java的扩展包javax.imag ...
- JAVA爬虫---验证码识别技术(一)
Python中有专门的图像处理技术比如说PIL,可以对验证码一类的图片进行二值化处理,然后对图片进行分割,进行像素点比较得到图片中的数字.这种方案对验证码的处理相对较少,运用相对普遍,很多验证码图片可 ...
- Spark案例分析
一.需求:计算网页访问量前三名 import org.apache.spark.rdd.RDD import org.apache.spark.{SparkConf, SparkContext} /* ...
- 《转》使用JAVA如何对图片进行格式检查以及安全检查处理
本文出自冯立彬的博客,原地址:http://www.fenglibin.com/use_java_to_check_images_type_and_security.html 一.通常情况下,验证一个 ...
- 一个在java后台实现的对图片进行加网纹或水印的工具类
import java.awt.AlphaComposite; import java.awt.Color; import java.awt.Font; import java.awt.Graphic ...
- 使用JAVA如何对图片进行格式检查以及安全检查处理
一.通常情况下,验证一个文件是否图片,可以通过以下三种方式: 1).判断文件的扩展名是否是要求的图片扩展名 这种判断是用得比较多的一种方式,不过这种方式非常的不妥,别人稍微的把一个不是图片的文件的扩展 ...
- Java新人学习(li)
一.项目中搭配使用SVN和Git 安装SVN:安装熟悉Git:安装maven,修改setting.xml文件:安装eclipse,配置jdk.maven路径: 建立自己的Git仓库,熟悉常用的Git命 ...
随机推荐
- HDU 1024(新最大子序列和 DP)
题意是要在一段数列中求 m 段互不重合的子数列的最大和. 动态规划,用数组 num[ ] 存储所给数列,建二维数组 dp[ ][ ] , dp[ i ][ j ] 表示当选择了第 j 个数字( num ...
- Golang入门教程(七)基本数据类型使用案例
18种基本数据类型使用 代码案例1 package main import "fmt" func main() { //使用 var 定义一个布尔类型并且初始化 var flag ...
- Docker 从入门到放弃(三)镜像使用
当运行容器时,使用的镜像如果在本地中不存在,docker 就会自动从 docker 镜像仓库中下载,默认是从 Docker Hub 公共镜像源下载. 下面我们来学习: 1.管理和使用本地 Docker ...
- 转--select/poll/epoll到底是什么一回事
面试题:说说select/poll/epoll的区别. 这是面试后台开发时的高频面试题,属于网络编程和IO那一块的知识.Android里面的Handler消息处理机制的底层实现就用到了epoll. 为 ...
- fastJson--json与java格式的转换
fastJson--json与java格式的转换: /* * alibaba提供的fastJson:用法: */ @Test public void testJson() { User user = ...
- cookie与session的区别与关系
cookie与session的区别 1. 存储位置不同 cookie存储在浏览器中 session存储在服务端里 2. 大小不同 cookie最大4K session由于是存在服务端,因此理论上没有大 ...
- C# using 的用法
Ø 前言 说起 C# using 语句,想必大家都不陌生,它是 C# 中关键字之一.我们基本每天写代码都会使用到,其实也非常简单. 1. 首先,说说 using 有哪些用途 1) 用于引用其 ...
- IEEE LaTeX模板使用BibTeX
IEEE LaTeX 模板使用 BibTeX 在Google Scholar获得的文献引用格式一般是BibTex的,而IEEE Transactions的模板默认用的是BibItem.目前没有什么自动 ...
- 隐马尔可夫模型HMM(一)
摘自 1.李航的<统计学习方法> 2.https://www.cnblogs.com/pinard/p/6945257.html 了解HMM模型 1.隐马尔可夫模型的定义 隐马尔可夫模型是 ...
- 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 ...