JFreeChart1.5.4中还有其他办法可以转base64吗
时间: 2023-08-10 11:05:39 浏览: 168
JfreeChart中文API
在 JFreeChart 1.5.4 中,除了将图表转换为 PNG 图片,然后将 PNG 图片转换为 Base64 编码的字符串以外,还可以使用 `PngEncoderAdapter` 对象将图表直接转换为 Base64 编码的字符串。示例代码如下:
```java
import org.jfree.chart.JFreeChart;
import org.jfree.chart.encoders.EncoderUtil;
import org.jfree.chart.encoders.ImageFormat;
import org.jfree.chart.encoders.ImageEncoder;
import org.jfree.chart.encoders.ImageEncoderFactory;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.util.Base64;
public class ChartUtil {
public static String getChartBase64(JFreeChart chart, int width, int height) throws IOException {
// 将图表转换为 PNG 图片
ByteArrayOutputStream baos = new ByteArrayOutputStream();
ImageEncoder encoder = ImageEncoderFactory.newInstance(ImageFormat.PNG, 1);
encoder.encode(chart.createBufferedImage(width, height), baos);
byte[] bytes = baos.toByteArray();
// 将 PNG 图片转换为 Base64 编码的字符串
return Base64.getEncoder().encodeToString(bytes);
}
public static String getChartBase64ByEncoder(JFreeChart chart, int width, int height) throws IOException {
// 将图表转换为 Base64 编码的字符串
PngEncoderAdapter adapter = new PngEncoderAdapter();
adapter.setQuality(1f);
adapter.setEncodingAlpha(true);
byte[] bytes = adapter.encode(chart.createBufferedImage(width, height));
// 将 PNG 图片转换为 Base64 编码的字符串
return Base64.getEncoder().encodeToString(bytes);
}
private static class PngEncoderAdapter {
private float quality;
private boolean encodingAlpha;
public void setQuality(float quality) {
this.quality = quality;
}
public void setEncodingAlpha(boolean encodingAlpha) {
this.encodingAlpha = encodingAlpha;
}
public byte[] encode(BufferedImage image) throws IOException {
ByteArrayOutputStream baos = new ByteArrayOutputStream();
EncoderUtil.writeBufferedImage(image, ImageFormat.PNG, encodingAlpha ? null : 24, quality, baos);
return baos.toByteArray();
}
}
}
```
其中,`getChartBase64()` 方法使用了之前的方法,将图表转换为 PNG 图片,然后将 PNG 图片转换为 Base64 编码的字符串;`getChartBase64ByEncoder()` 方法则使用了 `PngEncoderAdapter` 对象,将图表直接转换为 Base64 编码的字符串。
请注意,`PngEncoderAdapter` 对象需要依赖 `jcommon-1.0.23.jar` 和 `itext-2.1.7.jar` 两个库。
阅读全文