将base64字符串转换为图像

新手上路,请多包涵

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

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

        });

但我无法解码这个 base64

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

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

原文由 ABC 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 462
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);

请注意,这只是涉及哪些部分的示例。我根本没有优化这段代码,它是在我脑海中写下的。

原文由 Joshua Moore 发布,翻译遵循 CC BY-SA 3.0 许可协议

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

认为

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));

原文由 user711189 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题