Okay, basically I've developed a simple image upload system. The user selects a local image (using the HTML5 File / FileReader API) and has the ability to crop it before confirming the result.
The final result is viewed in a canvas so to send it to the server I'm using toDataURL. The backend server is a NodeJS server which then needs to make a REST call to a Java server which will create an image file from the data and save it to disk.
The results of toDataURL are in the form: data:image/png;base64, ENCODED DATA.
What would I need on the Java server to convert the string into it's proper binary representation?
Saving HTML canvas as an image is pretty easy, it can be done by just right-clicking on the canvas and save it as an image.
To save a new Canvas document:Choose File | Save As. In the Save As dialog box, select a location to store the document and type a file name. Click Save to store the document on disk.
toDataURL( ) ; / / This method saves graphics in png document. getElementById('cimg'). src = imgurl; // This will set img src to dataurl(png) so that it can be saved as image. In this way, we can save canvas data to file in HTML5.
You need to remove the data:image/png;base64,
part and base 64 decode the rest.
import java.awt.image.BufferedImage;
import java.io.ByteArrayInputStream;
import java.io.File;
import javax.imageio.ImageIO;
import javax.xml.bind.DatatypeConverter;
public class test {
public static void main (String[] args){
try{
// remove data:image/png;base64, and then take rest sting
String img64 = "64 base image data here";
byte[] decodedBytes = DatatypeConverter.parseBase64Binary(img64 );
BufferedImage bfi = ImageIO.read(new ByteArrayInputStream(decodedBytes));
File outputfile = new File("saved.png");
ImageIO.write(bfi , "png", outputfile);
bfi.flush();
}catch(Exception e)
{
//Implement exception code
}
}
}
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With