Image 抠图,背景透明处理
import java.awt.Graphics2D;
import java.awt.image.BufferedImage;
import java.io.File; import javax.imageio.ImageIO;
import javax.swing.ImageIcon; public class ImageUtil { /**
* 图片去白色的背景,并裁切
*
* @param image 图片
* @param range 范围 1-255 越大 容错越高 去掉的背景越多
* @return 图片
* @throws Exception 异常
*/
public static BufferedImage transferAlpha(BufferedImage bufferedImage, int range) throws Exception {
BufferedImage sub = null;
try {
ImageIcon imageIcon = new ImageIcon(bufferedImage);
Graphics2D g2D = (Graphics2D) bufferedImage.getGraphics();
g2D.drawImage(imageIcon.getImage(), 0, 0, imageIcon
.getImageObserver());
int alpha = 0;
int minX = bufferedImage.getWidth();
int minY = bufferedImage.getHeight();
int maxX = 0;
int maxY = 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) < range) && ((255 - G) < range) && ((255 - B) < range)) { //去除白色背景;
rgb = ((alpha + 1) << 24) | (rgb & 0x00ffffff);
} else {
minX = minX <= j2 ? minX : j2;
minY = minY <= j1 ? minY : j1;
maxX = maxX >= j2 ? maxX : j2;
maxY = maxY >= j1 ? maxY : j1;
}
bufferedImage.setRGB(j2, j1, rgb);
}
}
int width = maxX - minX;
int height = maxY - minY;
sub = bufferedImage.getSubimage(minX, minY, width, height);
ImageIO.write(sub, "png", new File("D:/new.png"));
} catch (Exception e) {
e.printStackTrace();
throw e;
} return sub;
}
}
去掉白色背景,并剪切成透明背景。
二维码生成并抠图
import com.google.common.collect.Lists;
import com.google.common.collect.Maps;
import com.google.zxing.BarcodeFormat;
import com.google.zxing.EncodeHintType;
import com.google.zxing.MultiFormatWriter;
import com.google.zxing.client.j2se.MatrixToImageWriter;
import com.google.zxing.common.BitMatrix;
public String generateQRCode(String url) {
		checkNotNull(url, ErrorCode.ERROR_ILLEGAL_PARAMTER);
		log.error("二维码生成:url{}", url);
		int width = 300;
		int height = 300;
		String uploadFileToQiniu = null;
		Map<EncodeHintType, String> hints = new HashMap<>();
		hints.put(EncodeHintType.CHARACTER_SET, "utf-8");
		BitMatrix bitMatrix = null;
		try {
			bitMatrix = new MultiFormatWriter().encode(url, BarcodeFormat.QR_CODE, width, height, hints);
			BufferedImage bufferedImage = MatrixToImageWriter.toBufferedImage(bitMatrix);
			BufferedImage transferAlpha = ImageUtil.transferAlpha(bufferedImage, 1);
			if (transferAlpha == null) {
				throw new BusinessException(ErrorCode.ERROR_ALPHA);// 抠图失败
			}
			ByteArrayOutputStream out = new ByteArrayOutputStream();
			ImageIO.write(transferAlpha, "png", out);
			byte[] b = out.toByteArray();
		} catch (Exception e) {
			throw new BusinessException(ErrorCode.ERROR_QRCODE);
		}
		return uploadFileToQiniu;
	}
Image 抠图,背景透明处理的更多相关文章
- 【原】CSS实现背景透明,文字不透明,兼容所有浏览器
		
11.11是公司成立的日子,16岁啦,我呢3岁半,感谢公司给了这样一个平台,让我得以学习和成长,这里祝愿公司发展越来越好~ 进入主题,每年11月11号是光棍节,产生于校园,本来只是一流传于年轻人的娱乐 ...
 - CSS实现背景透明,文字不透明(兼容各浏览器)
		
在 FF/Chrome 等较新的浏览器中可以使用css属性background- color的rgba轻松实现背景透明,而文字保持不透明.而IE6/7/8浏览器不支持rgba,只有使用IE的专属滤镜f ...
 - CSS实现背景透明,文字不透明,兼容所有浏览器
		
11.11是公司成立的日子,16岁啦,我呢3岁半,感谢公司给了这样一个平台,让我得以学习和成长,这里祝愿公司发展越来越好~ 进入主题,每年11月11号是光棍节,产生于校园,本来只是一流传于年轻人的娱乐 ...
 - css 背景透明文字(内容)不透明三种实现方法
		
好久没写博客了.以前还想着最少一个月抽空写几篇.结果没做到O(∩_∩)O~~.好吧.现在努力,继续坚持. 看着以前写的东西,感觉自己在逐渐成长. 先上图: 本文主要记录如上图一样的.文字或内容不透明, ...
 - VC++ CStatic控件背景透明且改变其文本时,文字重叠解决方法
		
最近在项目中将CStatic控件设置为背景透明且在一个定时器函数改变其文本,结果CStatic的文字重叠了.解决该问题的方案是:从CStatic类派生自己的静态文本控件. 其实设置背景透明,也就是在C ...
 - 用Photoshop处理图片使背景透明
		
用Photoshop处理图片使背景透明 打开一张图片 双击背景或者右键背景图层,新建一个图层, 选择魔棒工具,单击图片, 会自动选择颜色相近的范围 按下键盘的delete键,就可以删除魔棒所选择的区域 ...
 - android 自定义Dialog背景透明及显示位置设置
		
先贴一下显示效果图,仅作参考: 代码如下: 1.自定义Dialog public class SelectDialog extends AlertDialog{ public SelectDialog ...
 - <select>在chrome浏览器下背景透明问题
		
在上篇文章<只用CSS美化选择框>运用了背景透明的技巧来美化选择框,但在chrome浏览器下遇到了跟ie.ff不一样的透明效果,下面重现一下: 在一个大的div(背景红色)内放置一个sel ...
 - canvas背景透明
		
var can=document.getElementById("canv"); c=can.getContext("2d"); c.globalAlpha=. ...
 - CSS实现背景透明,文字不透明(各浏览器兼容)
		
/*CSS*/.waps{ background:url(07158.bmp) no-repeat top center fixed; width:1004px; text-align:center; ...
 
随机推荐
- OpenStack部署工具总结
			
目前感觉比较简单直观的部署工具有RDO.devstack.Fuel等: 1. RDO https://openstack.redhat.com/Quickstart REDHAT出品,支持Redhat ...
 - opencart在空间中安装出错,连接不上mysql
			
客户要求,要在国外某空间安装opencart.话说opencart根本没怎么搞过,也不太清楚,php也是半吊子,临时看了几天,硬着头皮上把. 出错,安装进行到数据库连接设置的时候,死活连接不上,开始以 ...
 - Shiro启用注解方式
			
shiro验证权限方式一种是基于url配置文件: 例如: <bean id="shiroFilter" class="org.apache.shiro.spring ...
 - USVN
			
我们最近将快盘上的东西迁移到了svn上,因为快盘总是不会不小心删掉或者修改了某些文件.为了能保留历史记录我们统一迁移到svn上.为了方便权限管理,我对比了几个svn的权限管理工具,最后觉得还是usvn ...
 - suspendlayout
			
c# this.suspendlayout有什么作用 为了防止layout事件的发生.这个事件将引发重新绘图的事件,如果介面上控件较多的话,改变控件某些属性时,由于不断地重画,性能变低,所以用susp ...
 - webstorm(注册,激活,破解,码,一起支持正版,最新可用)(2016.9.2更新)
			
webstorm(注册,激活,破解,码,一起支持正版,最新可用)(2016.9.2更新) 来源于:http://blog.csdn.net/xx1710/article/details/51725 ...
 - PICT安装与使用
			
一.PICT简介 PICT工具是在微软公司推出的一款成对组合的命令行生成工具,下载地址http://download.microsoft.com/download/f/5/5/f55484df-849 ...
 - 使用Grunt 插件打包Electron Windows应用
			
最近利用Electron来创建跨桌面应用的趋势似乎很火.看了几个用Electron开发的应用,这些应用在windows下面的安装方式,都是类似一个绿色软件的安装方法,下载.zip->解压到相应目 ...
 - 洛谷  P3366 【模板】最小生成树  prim算法思路  我自己的实现
			
网上有很多prim算法 用邻接矩阵 加什么lowcost数组 我觉得不靠谱 毕竟邻接矩阵本身就不是存图的好方法 所以自己写了一个邻接表(边信息表)版本的 注意我还是用了优先队列 每次新加入一个点 ...
 - PSP(11.9~11.16)
			
14号 类别c 内容c 开始时间s 结束e 中断I 净时间T 看书 设计模式 15:20 17:10 25m 85m 看书 构建执法 19:00 20:10 0m 70m 15号 类别c 内容c 开始 ...