我不确定我到底在做什么,所以请给出一些建议并原谅我的错误。
我有一个名为byte[]
的图片idCardImage
,我执行了以下操作将其转换为字符串:
String s = new String(idCardImage);
它打印出来像这样:
data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAEHUlEQVQ4TzWUW49VRRCFv6rq3ufMmTNn....
在网上进行了一些搜索,看起来这张图片采用png
格式,基本编码为64。
我需要做的是将其转换为jpeg
格式,然后将其存储在新的字节数组中。你能就如何用Java做一些建议吗?
答案 0 :(得分:6)
您可以使用RewriteRule ^api/v2.2/?$ /api/api.php [NC,L]
作为解释器来转换java中的图像。它允许读取图像数据,就像将图像数据写入指定格式一样。它需要ImageIO
才能读取图像数据。由于您有InputStream
,因此您可以轻松创建byte[]
。
ByteArrayInputStream
需要ImageIO
来写字节数据。而OutputStream
也允许提取它ByteArrayOutputStream
。因此,您可以将图像字节写入byte[]
并返回其字节。
请考虑以下示例
ByteArrayOutputStream
答案 1 :(得分:2)
我不确定这是否是最有效的方法,但你可以:
1)将该字符串中的数据转换为表示图像的字节,如:
String dataUrl = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAEHUlEQVQ4TzWUW49VRRCFv6rq3ufMmTNn...";
String header = "data:image/png;base64";
String encodedImage = dataUrl.substring(header.length()+1); //+1 to include comma
byte[] imageData = Base64.getDecoder().decode(encodedImage); //decode bytes
2)将该字节转换为BufferedImage
保存PNG图像
BufferedImage bufferedImage = ImageIO.read(new ByteArrayInputStream(imageData));
3)然后根据http://www.mkyong.com/java/convert-png-to-jpeg-image-file-in-java/你可以创建单独的BufferedImage并使用JPG fromat填充它
// create a blank, RGB, same width and height, and a white background BufferedImage newBufferedImage = new BufferedImage(bufferedImage.getWidth(), bufferedImage.getHeight(), BufferedImage.TYPE_INT_RGB); newBufferedImage.createGraphics().drawImage(bufferedImage, 0, 0, Color.WHITE, null);
(此步骤可以使用ImageIO.write(source, format, output)
简化,如@Channa Jayamuni answer)
4)最后我们可以在ByteArrayOutputStream的帮助下将这些字节写入单独的字节数组
ByteArrayOutputStream baos = new ByteArrayOutputStream();
ImageIO.write(newBufferedImage, "jpg",baos);
byte[] byteArray = baos.toByteArray();