java svgshape,java – 在Batik中使用SVGConverter将svg转换为png时的图像质量很差

我在将SVG转换为PNG(使用字节数组)时使用此代码:

private byte[] renderPng(byte[] svgBytes) {

try {

TranscoderInput transcoderInput = new TranscoderInput(new ByteArrayInputStream(svgBytes));

ByteArrayOutputStream output = new ByteArrayOutputStream();

TranscoderOutput transcoderOutput = new TranscoderOutput(output);

Transcoder transcoder = null;

String type = "png";

if(type.equalsIgnoreCase("png")) {

transcoder = new PNGTranscoder()

{

@Override

protected ImageRenderer createRenderer()

{

ImageRenderer r = super.createRenderer();

RenderingHints rh = r.getRenderingHints();

rh.add(new RenderingHints(RenderingHints.KEY_ALPHA_INTERPOLATION,

RenderingHints.VALUE_ALPHA_INTERPOLATION_QUALITY));

rh.add(new RenderingHints(RenderingHints.KEY_INTERPOLATION,

RenderingHints.VALUE_INTERPOLATION_BICUBIC));

rh.add(new RenderingHints(RenderingHints.KEY_ANTIALIASING,

RenderingHints.VALUE_ANTIALIAS_ON));

rh.add(new RenderingHints(RenderingHints.KEY_COLOR_RENDERING,

RenderingHints.VALUE_COLOR_RENDER_QUALITY));

rh.add(new RenderingHints(RenderingHints.KEY_DITHERING,

RenderingHints.VALUE_DITHER_DISABLE));

rh.add(new RenderingHints(RenderingHints.KEY_RENDERING,

RenderingHints.VALUE_RENDER_QUALITY));

rh.add(new RenderingHints(RenderingHints.KEY_STROKE_CONTROL,

RenderingHints.VALUE_STROKE_PURE));

rh.add(new RenderingHints(RenderingHints.KEY_FRACTIONALMETRICS,

RenderingHints.VALUE_FRACTIONALMETRICS_ON));

rh.add(new RenderingHints(RenderingHints.KEY_TEXT_ANTIALIASING,

RenderingHints.VALUE_TEXT_ANTIALIAS_OFF));

r.setRenderingHints(rh);

return r;

}

};

transcoder.addTranscodingHint(PNGTranscoder.KEY_BACKGROUND_COLOR, Color.WHITE);

} else {

transcoder = new JPEGTranscoder();

Float jpegQuality = new Float(0.95);

// KEY_WIDTH - seems to pick it up just fine from the SVG charts. Set to 560 otherwise.

// KEY_QUALITY 0-1.0 with 1.0 being No Loss. Value must be of type Float. 0.95 is 30% smaller and looks great.

transcoder.addTranscodingHint(JPEGTranscoder.KEY_QUALITY, jpegQuality);

}

// NOTE: for linux you need Java 1.4.1+ AND the headless environment (e.g. export JAVA_OPTS='-Djava.awt.headless=true').

try {

transcoder.transcode(transcoderInput, transcoderOutput);

}

catch(Exception e) {

logger.error("SVG To Raster response transcode exception", e);

if(output != null) {

output.close();

}

throw( new RuntimeException("SVG To Raster Filter Response Stream Exception", e) );

}

if(output != null) {

output.flush();

output.close();

}

transcoderInput = null;

transcoderOutput = null;

transcoder = null;

return output.toByteArray();

} catch (Exception exc) {

logger.error("Error in rendering png method", exc);

}

return new byte[0];

}

此外,SVG文档中的clipPath元素应包含此属性,否则将具有奇怪的工件:

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值