我有一个imageView:width=200 ,height=150
,当我上传一张大图像(.jpg)时,例如图片:1200 * 500像素,我减去imageView的宽度广告高度,图像会失去他的品质,它会不清楚,我能找到一种方法在imageView中添加.svg或矢量图像吗?
答案 0 :(得分:0)
我在apache中使用Transcoder API batik library project找到了一个选项,并将生成的BufferedImage转换为JavaFX Image。
修改强>
Transcoder 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();