5

1つのWMFファイルをカスタム出力解像度でPNG/BMP / JPG形式に変換するにはどうすればよいですか?

例:WMFファイルを取得し、2000x2000ピクセルのPNGファイルを出力します。

前もって感謝します。

4

3 に答える 3

5

これを実現するには、優れたBatik(http://xmlgraphics.apache.org/batik/)libを使用できます。ただし、次の手順に従う必要があります。

  1. WMFTranscoderを使用してWMFファイルをSVGに変換します
  2. JPGTranscoderを使用してSVGをJGPに変換します

WMF >> SVG >> JPG

これについてのcoderanchに関する議論は次のとおりです:http://www.coderanch.com/t/422868/java/java/converting-WMF-Windows-Meta-File

于 2013-01-11T13:23:38.917 に答える
2

WMF、EMF、およびEMF +はスライドショーの不可欠な部分であるため、ApachePOIの一部としてそれらのレンダラーを開発しました。今後のPOI-4.1.2に関しては、これはまだ進行中です。レンダリングの問題がある場合は、バグジラの新しいバグレポートにファイルをアップロードしてください。

主な説明は、POIドキュメントにあります。

抜粋は次のとおりです。

#1-ファイルまたはstdinを介してPPTX2PNGを使用する

ファイルシステムにアクセスするには、最初にスライドショー/ WMF / EMF / EMF +をディスクに保存してからPPTX2PNG.main()、対応するパラメーターを使用して呼び出す必要があります。

アクセスするには、次の前stdinにリダイレクトする必要があります。System.in

/* the file content */
InputStream is = ...;
/* Save and set System.in */
InputStream oldIn = System.in;
try {
    System.setIn(is);
    String[] args = {
        "-format", "png", // png,gif,jpg,svg or null for test
        "-outdir", new File("out/").getCanonicalPath(),
        "-outfile", "export.png",
        "-fixside", "long",
        "-scale", "800",
        "-ignoreParse",
        "stdin"
    };
    PPTX2PNG.main(args);
} finally {
    System.setIn(oldIn);
}

#2-*Pictureクラスを介してWMF/ EMF /EMF+をレンダリングする

File f = samples.getFile("santa.wmf");
try (FileInputStream fis = new FileInputStream(f)) {
    // for WMF
    HwmfPicture wmf = new HwmfPicture(fis);
    // for EMF / EMF+
    HemfPicture emf = new HemfPicture(fis);
    Dimension dim = wmf.getSize();
    int width = Units.pointsToPixel(dim.getWidth());
    // keep aspect ratio for height
    int height = Units.pointsToPixel(dim.getHeight());
    double max = Math.max(width, height);
    if (max > 1500) {
    width *= 1500/max;
    height *= 1500/max;
    }
    BufferedImage bufImg = new BufferedImage(width, height, BufferedImage.TYPE_INT_ARGB);
    Graphics2D g = bufImg.createGraphics();
    g.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
    g.setRenderingHint(RenderingHints.KEY_RENDERING, RenderingHints.VALUE_RENDER_QUALITY);
    g.setRenderingHint(RenderingHints.KEY_INTERPOLATION, RenderingHints.VALUE_INTERPOLATION_BICUBIC);
    g.setRenderingHint(RenderingHints.KEY_FRACTIONALMETRICS, RenderingHints.VALUE_FRACTIONALMETRICS_ON);
    wmf.draw(g, new Rectangle2D.Double(0,0,width,height));
    g.dispose();
    ImageIO.write(bufImg, "PNG", new File("bla.png"));
}
于 2019-12-01T23:28:56.840 に答える
0

この形式にはさまざまなツールを使用できます。たとえば、GIMPを選択できます。Javaには、WMFファイルを変換するためのライブラリがあります。

于 2013-01-11T13:30:06.237 に答える