Convert base64 string to image

匿名 (未验证) 提交于 2019-12-03 02:08:02

问题:

I am trying to crop/resize user profile image using jquery plugin namely crop.js which sends user image as base64 via ajax to my controller as

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

but I unable to decode this base64

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

string as Image,Can you guys guide me how can I save my base64 string as image on my server?.

回答1:

This assumes a few things, that you know what the output file name will be and that your data comes as a string. I'm sure you can modify the following to meet your needs:

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

Please note, this is just an example of what parts are involved. I haven't optimized this code at all and it's written off the top of my head.



回答2:

In the server, do something like this:

Suppose

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

Then:

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

Then you can do whatever you like with the bytes like:

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


回答3:

Server side encoding files/Images to base64String ready for client side consumption

public Optional<String> InputStreamToBase64(Optional<InputStream> inputStream) throws IOException{     if (inputStream.isPresent()) {         ByteArrayOutputStream output = new ByteArrayOutputStream();         FileCopyUtils.copy(inputStream.get(), output);         //TODO retrieve content type from file, & replace png below with it         return Optional.ofNullable("data:image/png;base64," + DatatypeConverter.printBase64Binary(output.toByteArray()));     }      return Optional.empty(); }

Server side base64 Image/File decoder

public Optional<InputStream> Base64InputStream(Optional<String> base64String)throws IOException {     if (base64String.isPresent()) {         return Optional.ofNullable(new ByteArrayInputStream(DatatypeConverter.parseBase64Binary(base64String.get())));     }      return Optional.empty(); }


回答4:

  public Optional<String> InputStreamToBase64(Optional<InputStream> inputStream) throws IOException{     if (inputStream.isPresent()) {         ByteArrayOutputStream outpString base64Image = data.split(",")[1]; byte[] imageBytes = javax.xml.bind.DatatypeConverter.parseBase64Binary(base64Image);

Then you can do whatever you like with the bytes like:

BufferedImage img = ImageIO.read(new ByteArrayInputStream(imageBytes));ut = new ByteArrayOutputStream();         FileCopyUtils.copy(inputStream.get(), output);         //TODO retrieve content type from file, & replace png below with it         return Optional.ofNullable("data:image/png;base64," + DatatypeConverter.printBase64Binary(output.toByteArray()));     }      return Optional.empty();


转载请标明出处:Convert base64 string to image
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!