java 图片转换工具

package com.sicdt.sicsign.web.utils;

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 javax.imageio.ImageIO;

import org.apache.commons.io.FileUtils;

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 MyImgUtil {

    /**
     * <br>描 述: 将图片BASE64字符串转为二进制数组
     * <br>作 者: 七脉
     * @param base64 new Image();img.src或canvas.toDataURL("image/png")
     * @return
     * @throws IOException
     */
    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>描 述:    图片/文件转二进制数组,这个方法有很多,只写一个
     * <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();
        }
    }

    public static void main(String[] args) throws IOException {
        //bytesToImg(imgToByte("C://Users//Administrator//Desktop//test.png"),"C://Users//Administrator//Desktop//bytes2img.png");
        byteArrayToFile(imgToByte("C://Users//Administrator//Desktop//test.png"),"C://Users//Administrator//Desktop//test2.png");
    }
}
时间: 2024-08-04 05:17:45

java 图片转换工具的相关文章

java 图片处理工具类

import java.awt.Image;  import java.awt.Rectangle;  import java.awt.geom.AffineTransform;  import java.awt.image.AffineTransformOp;  import java.awt.image.BufferedImage;  import java.io.File;  import java.io.FileInputStream;  import java.io.IOExcepti

常用的Java字符转换工具类

该类里包含了Java中常用的字符串处理方法,如日期处理.金额转换... ----------------------------------------------------------------------------------------- import java.math.BigDecimal;import java.sql.Timestamp;import java.text.SimpleDateFormat;import java.util.Calendar;import jav

java图片处理工具

图片处理工具 import java.io.*; import java.util.Date; import java.awt.*; import java.awt.image.*; import javax.imageio.ImageIO; import com.sun.image.codec.jpeg.*; /**  * 图片压缩处理  *  * @author kuang hj  */ public class ImgCompressUtils {     // 图片对象     priv

图片转换工具类

package com.cj.photography.util; import sun.misc.BASE64Decoder; import java.io.File; import java.io.FileOutputStream; import java.io.OutputStream; import java.util.UUID; /** * @author Jamin <br> * @date 2019/4/10 10:33 <br> * 将base64转为图片的工具 */

JAVA 编码格式转换工具类

package com.gootrip.util; import java.io.UnsupportedEncodingException; /** * <p>Title:字符编码工具类 </p> */ public class CharTools { /** * 转换编码 ISO-8859-1到GB2312 * @param text * @return */ public static final String ISO2GB(String text) { String resu

java图片处理工具之-ImageMagick+jmagick(一)

1.介绍: ImageMagick是一套功能强大.稳定而且免费的工具集和开发包,可以用来读.写和处理超过89种基本格式的图片文件,包括流行的TIFF, JPEG, GIF, PNG, PDF以及PhotoCD等格式.利用ImageMagick,你可以根据web应用程序的需要动态生成图片, 还可以对一个(或一组)图片进行改变大小.旋转.锐化.减色或增加特效等操作,并将操作的结果以相同格式或其它格式保存.是搜狗百科的介绍! 2.下载: 其他安装教程:http://blog.sina.com.cn/s

linux下图片转换工具[【转】

本文转载自:https://linux.cn/article-8014-1.html 计算机术语中,批处理指的是用一个非交互式的程序来执行一序列的任务的方法.这篇教程里,我们会使用 Linux 命令行工具,并提供 4 种简单的处理方式来把一些 .PNG 格式的图像批量转换成 .JPG 格式的,以及转换回来. 虽然所有示例中我们使用的都是 convert 命令行工具,但是您也可以使用 mogrify 命令来达到同样的效果. convert 命令的语法如下: $ convert 输入选项 输入文件

java 文件格式转换工具

有时候一个文件格式正确在某些情况下不一定能够正确播放,下面可以借助于java的一个类帮助我们把文件格式转正确 File source = new File(filepath); int index=amr.lastIndexOf("."); wavFile=amr.substring(0,index)+".wav"; File target = new File(wavFile); AudioAttributes audio = new AudioAttribute

java bean 转换工具

考量要素: 1.简单的约定优于配置的同名属性copy 2.嵌套属性copy 3.flattern(扁平化)支持,要支持N层结构的copy到一层结构. 4.性能 如下这个网页,里面提到了好多工具. http://stackoverflow.com/questions/1432764/any-tool-for-java-object-to-object-mapping 注意到许多工具采用静态化的生成java字节码的方式,这样和hardcode性能所差无几了. id 描述 是否支持flattern 最