JAVA读取EMF文件并转化为PNG,JPG,GIF格式

简介: JAVA读取EMF文件并转化为PNG,JPG,GIF格式

JAVA读取EMF文件并转化为PNG,JPG,GIF格式

使用第三方库下载地址为:http://java.freehep.org/vectorgraphics/index.html

主要思路:

使用EMFInputStream读取EMF文件,然后使用EMFRenderer对象将EMF绘制到创建


好的空白的BufferedImage里面。这样就把EMF图片转化为Java中的BufferedImage对


象,然后可以重新保存为Java 2D支持图像格式如PNG或者JPG等。

代码如下:

import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
 
import javax.imageio.ImageIO;
import javax.swing.JFrame;
import javax.swing.JPanel;
 
import org.freehep.graphicsio.emf.EMFInputStream;
import org.freehep.graphicsio.emf.EMFRenderer;
/**
 * download the third-party libraries here:
 * http://java.freehep.org/vectorgraphics/index.html
 * 
 * @author gloomyfish
 *
 */
 
public class EMFReader {
  public static void main(String[] args) {
    try {
      EMFInputStream inputStream = new EMFInputStream(new FileInputStream("D:\\export.emf"), EMFInputStream.DEFAULT_VERSION);
      System.out.println("height = " + inputStream.readHeader().getBounds().getHeight());
      System.out.println("widht = " + inputStream.readHeader().getBounds().getWidth());
      
      // headerInfo of bitmap API always tell a lie, could not get 
      // correct width and height
      // BitmapInfoHeader headerInfo = new BitmapInfoHeader(inputStream);
      // System.out.println("Big Error on reading emf format picture");
      EMFRenderer emfRenderer = new EMFRenderer(inputStream);
      
      // create buffered image object from EMF render
        final int width = (int)inputStream.readHeader().getBounds().getWidth();
        final int height = (int)inputStream.readHeader().getBounds().getHeight();
        System.out.println("widht = " + width + " and height = " + height);
        final BufferedImage result = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
        Graphics2D g2 = (Graphics2D)result.createGraphics();
        emfRenderer.paint(g2);
        
        // write it as png/jpg/gif, up to you!!!
        File outputfile = new File("D:\\result.png");
        ImageIO.write(result, "png", outputfile);
 
        // display it
        JPanel resultPanel = new JPanel() {
          /**
         * 
         */
        private static final long serialVersionUID = 1L;
 
        public void paintComponent(Graphics g) {
          super.paintChildren(g);
          Graphics2D g2 = (Graphics2D)g;
          g2.drawImage(result, 0, 0, width, height, null);
          }
        };
        JFrame ui = new JFrame("EMF Reader");
        ui.getContentPane().setLayout(new BorderLayout());
        ui.getContentPane().add(resultPanel, BorderLayout.CENTER);
        ui.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        ui.setSize(new Dimension(width+20, height+40));
        ui.setVisible(true);
    } catch (FileNotFoundException e) {
      e.printStackTrace();
    } catch (IOException e) {
      e.printStackTrace();
    }
  }
 
}

目录
打赏
0
0
0
0
81
分享
相关文章
|
4月前
|
java小工具util系列5:java文件相关操作工具,包括读取服务器路径下文件,删除文件及子文件,删除文件夹等方法
java小工具util系列5:java文件相关操作工具,包括读取服务器路径下文件,删除文件及子文件,删除文件夹等方法
119 9
解锁“分享文件”高效密码:探秘 Java 二叉搜索树算法
在信息爆炸的时代,文件分享至关重要。二叉搜索树(BST)以其高效的查找性能,为文件分享优化提供了新路径。本文聚焦Java环境下BST的应用,介绍其基础结构、实现示例及进阶优化。BST通过有序节点快速定位文件,结合自平衡树、多线程和权限管理,大幅提升文件分享效率与安全性。代码示例展示了文件插入与查找的基本操作,适用于大规模并发场景,确保分享过程流畅高效。掌握BST算法,助力文件分享创新发展。
深潜数据海洋:Java文件读写全面解析与实战指南
通过本文的详细解析与实战示例,您可以系统地掌握Java中各种文件读写操作,从基本的读写到高效的NIO操作,再到文件复制、移动和删除。希望这些内容能够帮助您在实际项目中处理文件数据,提高开发效率和代码质量。
20 0
FastExcel:开源的 JAVA 解析 Excel 工具,集成 AI 通过自然语言处理 Excel 文件,完全兼容 EasyExcel
FastExcel 是一款基于 Java 的高性能 Excel 处理工具,专注于优化大规模数据处理,提供简洁易用的 API 和流式操作能力,支持从 EasyExcel 无缝迁移。
347 9
FastExcel:开源的 JAVA 解析 Excel 工具,集成 AI 通过自然语言处理 Excel 文件,完全兼容 EasyExcel
|
3月前
|
java实现从HDFS上下载文件及文件夹的功能,以流形式输出,便于用户自定义保存任何路径下
java实现从HDFS上下载文件及文件夹的功能,以流形式输出,便于用户自定义保存任何路径下
125 34
Git使用教程-将idea本地Java等文件配置到gitte上【保姆级教程】
本内容详细介绍了使用Git进行版本控制的全过程,涵盖从本地仓库创建到远程仓库配置,以及最终推送代码至远程仓库的步骤。
53 0
RocketMQ文件刷盘机制深度解析与Java模拟实现
【11月更文挑战第22天】在现代分布式系统中,消息队列(Message Queue, MQ)作为一种重要的中间件,扮演着连接不同服务、实现异步通信和消息解耦的关键角色。Apache RocketMQ作为一款高性能的分布式消息中间件,广泛应用于实时数据流处理、日志流处理等场景。为了保证消息的可靠性,RocketMQ引入了一种称为“刷盘”的机制,将消息从内存写入到磁盘中,确保消息持久化。本文将从底层原理、业务场景、概念、功能点等方面深入解析RocketMQ的文件刷盘机制,并使用Java模拟实现类似的功能。
86 3
|
4月前
|
Java将OffsetDateTime格式化为 yyyy-MM-dd HH:mm:ss 如何写代码?
Java将OffsetDateTime格式化为 yyyy-MM-dd HH:mm:ss 如何写代码?
91 0

热门文章

最新文章

AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等