将 base64 字符串转换为图像

2022-08-31 16:14:48

我正在尝试使用jquery插件裁剪/调整用户配置文件图像的大小,即裁剪.js它将用户图像作为base64通过ajax发送到我的控制器

$.ajax({
         type: "post",
         dataType: "json",
         url: "${g.createLink(controller: 'personalDetail', action:'uploadUserImage')}",
         data: { avatar: canvas.toDataURL() }

        });

但我无法解码这个基地64

'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAPAAAADwCAYAAAA+VemSAAAgAEl...==' 

字符串作为图像,你们可以指导我如何将我的base64字符串保存为服务器上的图像?


答案 1

在服务器中,执行如下操作:

假设

String data = 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAPAAAADwCAYAAAA+VemSAAAgAEl...=='

然后:

String base64Image = data.split(",")[1];
byte[] imageBytes = javax.xml.bind.DatatypeConverter.parseBase64Binary(base64Image);

然后,您可以使用以下字节执行任何您喜欢的操作:

BufferedImage img = ImageIO.read(new ByteArrayInputStream(imageBytes));

答案 2

这假设了一些事情,您知道输出文件名是什么,并且您的数据以字符串形式出现。我相信您可以修改以下内容以满足您的需求:

// Needed Imports
import java.io.ByteArrayInputStream;
import sun.misc.BASE64Decoder;


def sourceData = 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAPAAAADwCAYAAAA+VemSAAAgAEl...==';

// tokenize the data
def parts = sourceData.tokenize(",");
def imageString = parts[1];

// create a buffered image
BufferedImage image = null;
byte[] imageByte;

BASE64Decoder decoder = new BASE64Decoder();
imageByte = decoder.decodeBuffer(imageString);
ByteArrayInputStream bis = new ByteArrayInputStream(imageByte);
image = ImageIO.read(bis);
bis.close();

// write the image to a file
File outputfile = new File("image.png");
ImageIO.write(image, "png", outputfile);

请注意,这只是涉及哪些部分的示例。我根本没有优化这个代码,它被注销了。


推荐