我遵循xehpuk的回答,但是某些图像在某些浏览器中通过数据url(Chrome和Firefox,Safari似乎可以很好地渲染)时缺少最后几行像素时出现问题。我怀疑这是因为浏览器正在做最好的解释数据,但是数据的最后几个字节丢失了,所以它显示了它可以做什么。
输出流的包装似乎是导致此问题的原因。的文档
base64.wrap(OutputStream os)说明:
建议在使用后立即关闭返回的输出流,在此期间它将所有可能的剩余字节刷新到基础输出流。
因此,根据数据的长度,有可能由于
close()未对其调用而没有从流中清除最后几个字节。我对此的解决方案是不打扰包装流,而只是直接编码流:
public static String imgTobase64String(final RenderedImage img, final String formatName){ final ByteArrayOutputStream os = new ByteArrayOutputStream(); try { ImageIO.write(img, formatName, os); return base64.getEnprer().enpreToString(os.toByteArray()); } catch (final IOException ioe) { throw new UncheckedIOException(ioe); }}
这解决了在浏览器中渲染时缺少像素行的问题。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)