aspose words做插入压缩后图片到Word文档中

最近用aspose words做导出Word的功能,发现图片的导出有点难受,一开始是这样写的 

Document doc = new Document("D:\\Template.docx");
List<Map<String, Object>> dataList = new ArrayList<Map<String, Object>>();
 
String imagePath = "D:\\employees.jpg";
//读取一个二进制图片 
FileInputStream fis = new FileInputStream(imagePath);
byte[] image = new byte[fis.available()];
fis.read(image);
fis.close();
record.put("PhotoBLOB", image);

dataList.add(record);

这样写没错,就是待会会因为图片的大小而把表格撑开

就是这样,所以,我们需要把图片压缩到我们想要的结果后再导出来 

String a = Global.getConfig("vfs.pr") + MapUtils.getString(map, "NEWFILESPATH");
File f = new File(a);
String newjpg = Global.getConfig("vfs.pr") + System.currentTimeMillis() + "." + f.getName().substring(f.getName().lastIndexOf(".") + 1);
FileOutputStream out = new FileOutputStream(newjpg);
thumbnail(f, out);//压缩图片的函数
out.close();
FileInputStream fileInputStream = new FileInputStream(newjpg);
byte[] image = new byte[fileInputStream.available()];
fileInputStream.read(image);
fileInputStream.close();
record.put("FILESPATH", image);
 /**
     * 按照固定宽高原图压缩
     *
     * @param img
     * @param out
     * @throws IOException
     */
    public static void thumbnail(File img, OutputStream out) throws IOException {
        BufferedImage BI = ImageIO.read(img);
        int width = 95;
        int height = 65;
        //文件后缀名
        String a = img.getName().substring(img.getName().lastIndexOf(".") + 1);
        Image image = BI.getScaledInstance(width, height, Image.SCALE_SMOOTH);
        BufferedImage tag = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
        Graphics g = tag.getGraphics();
        g.drawImage(image, 0, 0, null); // 绘制处理后的图
        g.dispose();
        ImageIO.write(tag, a, out);
    }

这样图片就会按照95, 65的场合宽压缩出来了,不过到这里需要注意的是,在这里图片后缀是jpg压缩出来顶多一般就是失真问题,png就不一样了,是直接黑底的。

所以我需要再添加对png图片的压缩

 /**
     * 按照固定宽高原图压缩
     *
     * @param img
     * @param out
     * @throws IOException
     */
    public static void thumbnail(File img, OutputStream out) throws IOException {
        BufferedImage BI = ImageIO.read(img);
        int width = 95;
        int height = 65;
        //文件后缀名
        String a = img.getName().substring(img.getName().lastIndexOf(".") + 1);
        if (a.equalsIgnoreCase("jpg")) {
            Image image = BI.getScaledInstance(width, height, Image.SCALE_SMOOTH);
            BufferedImage tag = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
            Graphics g = tag.getGraphics();
            g.drawImage(image, 0, 0, null); // 绘制处理后的图
            g.dispose();
            ImageIO.write(tag, a, out);
        }
        //对png的读取压缩 
        else if (a.equalsIgnoreCase("png")) {
            BufferedImage tag = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
            Graphics2D g2d = tag.createGraphics();
            tag = g2d.getDeviceConfiguration().createCompatibleImage(width, height, Transparency.TRANSLUCENT);
            g2d.dispose();
            g2d = tag.createGraphics();
            Image image = BI.getScaledInstance(width, height, BI.SCALE_AREA_AVERAGING);
            g2d.drawImage(image, 0, 0, null); // 绘制处理后的图
            g2d.dispose();
            ImageIO.write(tag, a, out);
        }
    }

这样就可以了

我前面有发过对aspose word导出word的简单介绍,可以结合这个和那篇一起了解。

简单介绍aspose-words-18.10-jdk16做导出word ,链接:https://blog.csdn.net/qq_32003379/article/details/85176441

如有什么需要改进的地方,请大佬们指点一下Thanks♪(・ω・)ノ

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值