我可以在 ImageView 中添加 SVG 图像吗?

Can i add SVG image in ImageView?

我有一个 imageView:width=200 ,height=150,当我上传大图像 (.jpg) 例如图像:1200*500 像素并且我减去 imageView 的宽度和高度时,图像失去了质量,不清楚,我能找到一种在 imageView 中添加 .svg 或矢量图像的方法吗?

我通过使用来自 apache 的 Transcoder API of batik library project 找到了一个选项,并将生成的 BufferedImage 转换为 JavaFX 图像。

编辑:

代码转换器 API 提供 类 将 SVG 文档转换为 PNG、JPG、TIFF,我们可以使用此代码示例从 SVG 路径创建 JPEG 图像,

import java.io.*;

import org.apache.batik.transcoder.image.JPEGTranscoder;
import org.apache.batik.transcoder.TranscoderInput;
import org.apache.batik.transcoder.TranscoderOutput;

public class SaveAsJPEG {

    public static void main(String[] args) throws Exception {

        // Create a JPEG transcoder
        JPEGTranscoder t = new JPEGTranscoder();

        // Set the transcoding hints.
        t.addTranscodingHint(JPEGTranscoder.KEY_QUALITY,
                   new Float(.8));

        // Create the transcoder input.
        String svgURI = new File("C:\Users\Blue\Downloads\icon8_smile.svg").toURL().toString();
        TranscoderInput input = new TranscoderInput(svgURI);

        // Create the transcoder output.
        OutputStream ostream = new FileOutputStream("icon8_smile.jpg");
        TranscoderOutput output = new TranscoderOutput(ostream);

        // Save the image.
        t.transcode(input, output);

        // Flush and close the stream.
        ostream.flush();
        ostream.close();
        System.exit(0);
    }
}

通过这种方式,我们可以将 SVG 矢量图像转换为基于像素的其他图像。 我们可以将其他选项添加到我们的代码中,以帮助我们定义输出图像的大小:

t.addTranscodingHint(JPEGTranscoder.KEY_WIDTH, new Float(250));

这行代码帮助我们根据 ImageView 的大小定义图像的大小,我们可以像这样进行一些更改:

t.addTranscodingHint(JPEGTranscoder.KEY_WIDTH, imageView.getFitWidth();