java 图片转换工具
package com.sicdt.sicsign.web.utils; import java.awt.Graphics2D;
import java.awt.image.BufferedImage;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream; import javax.imageio.ImageIO;
import javax.swing.ImageIcon; import org.apache.commons.io.FileUtils;
import org.bouncycastle.util.encoders.Base64Encoder; import com.itextpdf.text.Document;
import com.itextpdf.text.DocumentException;
import com.itextpdf.text.Image;
import com.itextpdf.text.PageSize;
import com.itextpdf.text.pdf.PdfWriter; public class MyImgUtils { /**
* <br>描 述: 将图片BASE64字符串转为二进制数组
* <br>作 者: 七脉
* @param base64 new Image();img.src或canvas.toDataURL("image/png")
* @return
* @throws IOException
*/
@SuppressWarnings("restriction")
public static byte[] imgBase64ToBytes(String base64) {
sun.misc.BASE64Decoder decoder = new sun.misc.BASE64Decoder();
//因为参数base64来源不一样,需要将附件数据替换清空掉。如果此入参来自canvas.toDataURL("image/png");
base64 = base64.replaceAll("data:image/png;base64,", "");
//base64解码并转为二进制数组
byte[] bytes = null;
try {
bytes = decoder.decodeBuffer(base64);
for (int i = 0; i < bytes.length; ++i) {
if (bytes[i] < 0) {// 调整异常数据
bytes[i] += 256;
}
}
} catch (IOException e) {
e.printStackTrace();
}
return bytes;
} /**
* <br>描 述: 图片字节数组转base64
* <br>作 者: shizhenwei
* <br>历 史: (版本) 作者 时间 注释
* @return
*/
@SuppressWarnings("restriction")
public static String bytesToImgBase64(byte[] bytes){
sun.misc.BASE64Encoder encoder = new sun.misc.BASE64Encoder();
return encoder.encode(bytes);
} /**
*
* <br>描 述: 图片/文件转二进制数组,这个方法有很多,只写一个
* <br>作 者: 七脉
* @param imgPath 图片路径
* @return
* @throws FileNotFoundException
*/
public static byte[] imgToBytes(String imgPath) {
File file = new File(imgPath);
BufferedImage bi = null;
ByteArrayOutputStream baos = null;
try {
//文件使用其他工具
bi = ImageIO.read(file);
baos = new ByteArrayOutputStream();
int index = imgPath.lastIndexOf(".");
String format = imgPath.substring(index+1);
ImageIO.write(bi, format, baos);
byte[] bytes = baos.toByteArray();
baos.close();
return bytes;
} catch (IOException e) {
e.printStackTrace();
}
return null;
} /**
*
* <br>描 述: 将二进制转换为图片
* <br>作 者: 七脉
* @param outPath 将图片输出到哪里
* @param savePath 保存位置
*/
public static void bytesToImg(byte[] bytes,String savePath){
ByteArrayInputStream baos = new ByteArrayInputStream(bytes);
try {
BufferedImage bi = ImageIO.read(baos);
File file = new File(savePath);
ImageIO.write(bi, "png", file);
baos.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
} /**
* <br>描 述: 图片二进制数组转PDF二进制数组
* <br>作 者: 七脉
* @param imgBytes 图片二进制数组
* @return
*/
public static byte[] imgBytesToPdfBytes(byte[] imgBytes){
byte[] bytes = null;
Document document = new Document();
ByteArrayOutputStream baos = new ByteArrayOutputStream();
try {
PdfWriter.getInstance(document, baos);
// 设置文档的大小
document.setPageSize(PageSize.A4);
// 打开文档
document.open();
// 读取一个图片
Image image = Image.getInstance(imgBytes);
float imageWidth = image.getScaledWidth();
int i = 0;
while (imageWidth > 600) {
image.scalePercent(100 - i);
i++;
imageWidth = image.getScaledWidth();
}
image.setAlignment(Image.ALIGN_CENTER);
// 插入一个图片
document.add(image);
//转二进制数组
bytes = baos.toByteArray();
return bytes;
} catch (DocumentException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally {
if(null!=baos){
try {
baos.close();
} catch (IOException e) {
e.printStackTrace();
}
}
if(null!=document){
document.close();
}
}
return bytes;
} /**
*
* <br>描 述: 二进制转文件,什么样的二进制转什么样的文件
* <br>作 者: 七脉
* @param bytes 二进制数组
* @param savePath 文件保存路径
*/
public static void byteArrayToFile(byte[] bytes,String savePath){
try {
FileUtils.writeByteArrayToFile(new File(savePath), bytes);
} catch (IOException e) {
e.printStackTrace();
}
} /**
* <br>描 述: 去除图片背景,转透明图
* <br>作 者: shizhenwei
* <br>历 史: (版本) 作者 时间 注释
* @param is
* @return
*/
public static byte[] toTransparency(InputStream is) {
ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
try {
BufferedImage bi = ImageIO.read(is);
java.awt.Image image = (java.awt.Image) bi;
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", byteArrayOutputStream);// 直接输出文件
} catch (Exception e) {
e.printStackTrace();
}
return byteArrayOutputStream.toByteArray();
} }
java 图片转换工具的更多相关文章
- Base64 图片转换工具
以前在写asp的后台的时候,有一个上传功能是必须的,那时候进行的图片预览(未上传前)其实就是获取本地的图片路径来显示图片,但是随着HTML5的出现,可以把图片通过编码来实现预览. 在雅虎的36条速度优 ...
- xnconvert 图片转换工具
xnconvert是一款简单高效的图片转换工具.xnconvert能够批量地进行图片格式转换,并具有一定的图片处理功能,可以增加水印.特效,支持放大缩小.旋转等. xnconvert功能介绍: 你可以 ...
- 我的Android进阶之旅------>Java文件大小转换工具类 (B,KB,MB,GB,TB,PB之间的大小转换)
Java文件大小转换工具类 (B,KB,MB,GB,TB,PB之间的大小转换) 有时候要做出如下所示的展示文件大小的效果时候,需要对文件大小进行转换,然后再进行相关的代码逻辑编写. 下面是一个Java ...
- java图片处理工具类
直接上代码: package com.zxd.tool; /** * Created by zhang on 14-3-1. * 图片的常用操作类 */ import java.awt.AlphaCo ...
- java 图片转换成base64字符串
import java.io.ByteArrayOutputStream; import java.io.FileInputStream;import java.io.FileOutputStream ...
- Java 图片验证码工具
package com.microwisdom.utils; import java.awt.Color; import java.awt.Font; import java.awt.Graphics ...
- java json转换工具类
在java项目中,通常会用到json类型的转换,常常需要对 json字符串和对象进行相互转换. 在制作自定义的json转换类之前,先引入以下依赖 <!--json相关工具--><de ...
- java 图片处理工具类
import java.awt.Image; import java.awt.Rectangle; import java.awt.geom.AffineTransform; import ja ...
- java bean 转换工具
考量要素: 1.简单的约定优于配置的同名属性copy 2.嵌套属性copy 3.flattern(扁平化)支持,要支持N层结构的copy到一层结构. 4.性能 如下这个网页,里面提到了好多工具. ht ...
随机推荐
- ServletContext与Web应用以及Spring容器启动
一.ServletContext对象获取Demo Servlet容器在启动时会加载Web应用,并为每个Web应用创建唯一的ServletContext对象. 可以把ServletContext看作一个 ...
- PHP安装加载yaf扩展
Yaf,全称 Yet Another Framework,是一个C语言编写的PHP框架,是一个用PHP扩展形式提供的PHP开发框架, 相比于一般的PHP框架, 它更快. 它提供了Bootstrap, ...
- 我的第二个java程序 循环
public class Test {//类 public Test (int num){//构造方法,和类同名,无返回值,接收传参并定义传参的类型,大小写敏感 int x = 10;//局部变量,定 ...
- 【转】Silverlight全开源工作流设计器
声明 此工作流是作者自行构思和设计的被动式数据触发模式的工作流.没有遵循各种现有的工作流设计标准(如WFMC或WSFL),也没有与其他工作流通用性的接口规范.这里体现更多的是作者对工作流的使用思想,及 ...
- JavaScript 函数语法
函数就是包裹在花括号中的代码块,前面使用了关键词 function: function functionname() { 这里是要执行的代码 } 当调用该函数时,会执行函数内的代码. 可以在某事件发生 ...
- python 爬虫5 Beautiful Soup的用法
1.创建 Beautiful Soup 对象 from bs4 import BeautifulSoup html = """ <html><head& ...
- chrome 设置代理服务器
通过设置google chrome浏览器的代理服务器可以让google chrome浏览器通过代理服务器上网,可以隐藏本机的IP地址或者访问一些不能直接访问的网站. 工具/原料 google ch ...
- 3、easyUI-创建 CRUD可创建展开行明细编辑dataGrid(表格)
同样在上一节中讲到可以编辑的表格,现在讲一般用到的最后一个datagrid(表格)相关的展开明细可编辑的表格: 第三中表格主要应用场景在:列出表格信息,然后点击可以查看详细信息(此处是全部可以编辑,可 ...
- IIPP迷你项目(四)"Pong"
1 小球在墙面的反弹 1-1 让小球在画布上匀速运动 在这一步中,首先应该明确小球是如何匀速运动的.它的方法是规定一个列表v,Scott老师说这代表着“速度(Velocity)”,但是我觉得也可以拿“ ...
- SharePoint服务器端对象模型 之 序言
对于刚刚开始接触SharePoint的开发人员,即使之前有较为丰富的ASP.NET开发经验,在面对SharePoint时候可能也很难找到入手的方向.对于任何一种开发平台而言,学习开发的过程大致会包括: ...