Last active
July 24, 2021 12:19
-
-
Save teocci/d34a18231ca18d99014bafe6a4553b4f to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import java.awt.Graphics2D; | |
import java.awt.Image; | |
import java.awt.image.BufferedImage; | |
import java.io.ByteArrayInputStream; | |
import java.io.ByteArrayOutputStream; | |
import java.io.File; | |
import java.io.FileInputStream; | |
import java.io.FileNotFoundException; | |
import java.io.IOException; | |
import java.util.Iterator; | |
import java.util.logging.Level; | |
import java.util.logging.Logger; | |
import javax.imageio.ImageIO; | |
import javax.imageio.ImageReadParam; | |
import javax.imageio.ImageReader; | |
import javax.imageio.stream.ImageInputStream; | |
public class ConvertImage { | |
public static void main(String[] args) throws FileNotFoundException, IOException { | |
/* | |
* In this function the first part shows how to convert an image file to | |
* byte array. The second part of the code shows how to change byte array | |
* back to a image | |
*/ | |
File file = new File("C:\\rose.jpg"); | |
System.out.println(file.exists() + "!!"); | |
FileInputStream fis = new FileInputStream(file); | |
//create FileInputStream which obtains input bytes from a file in a file system | |
//FileInputStream is meant for reading streams of raw bytes such as image data. For reading streams of characters, consider using FileReader. | |
//InputStream in = resource.openStream(); | |
ByteArrayOutputStream bos = new ByteArrayOutputStream(); | |
byte[] buf = new byte[1024]; | |
try { | |
for (int readNum; (readNum = fis.read(buf)) != -1;) { | |
bos.write(buf, 0, readNum); | |
//no doubt here is 0 | |
/*Writes len bytes from the specified byte array starting at offset | |
off to this byte array output stream.*/ | |
System.out.println("read " + readNum + " bytes,"); | |
} | |
} catch (IOException ex) { | |
Logger.getLogger(ConvertImage.class.getName()).log(Level.SEVERE, null, ex); | |
} | |
byte[] bytes = bos.toByteArray(); | |
//bytes is the ByteArray we need | |
/* | |
* The second part shows how to convert byte array back to an image file | |
*/ | |
//Before is how to change ByteArray back to Image | |
ByteArrayInputStream bis = new ByteArrayInputStream(bytes); | |
Iterator<?> readers = ImageIO.getImageReadersByFormatName("jpg"); | |
//ImageIO is a class containing static convenience methods for locating ImageReaders | |
//and ImageWriters, and performing simple encoding and decoding. | |
ImageReader reader = (ImageReader) readers.next(); | |
Object source = bis; // File or InputStream, it seems file is OK | |
ImageInputStream iis = ImageIO.createImageInputStream(source); | |
//Returns an ImageInputStream that will take its input from the given Object | |
reader.setInput(iis, true); | |
ImageReadParam param = reader.getDefaultReadParam(); | |
Image image = reader.read(0, param); | |
//got an image file | |
BufferedImage bufferedImage = new BufferedImage(image.getWidth(null), image.getHeight(null), BufferedImage.TYPE_INT_RGB); | |
//bufferedImage is the RenderedImage to be written | |
Graphics2D g2 = bufferedImage.createGraphics(); | |
g2.drawImage(image, null, null); | |
File imageFile = new File("C:\\newrose2.jpg"); | |
ImageIO.write(bufferedImage, "jpg", imageFile); | |
//"jpg" is the format of the image | |
//imageFile is the file to be written to. | |
System.out.println(imageFile.getPath()); | |
} | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import java.awt.image.BufferedImage; | |
import java.io.ByteArrayInputStream; | |
import java.io.ByteArrayOutputStream; | |
import java.io.File; | |
import java.io.IOException; | |
import javax.imageio.ImageIO; | |
import com.sun.org.apache.xerces.internal.impl.dv.util.Base64; | |
public class SimpleConvertImage { | |
public static void main(String[] args) throws IOException{ | |
String dirName="C:\\"; | |
ByteArrayOutputStream baos=new ByteArrayOutputStream(1000); | |
BufferedImage img=ImageIO.read(new File(dirName,"rose.jpg")); | |
ImageIO.write(img, "jpg", baos); | |
baos.flush(); | |
String base64String=Base64.encode(baos.toByteArray()); | |
baos.close(); | |
byte[] bytearray = Base64.decode(base64String); | |
BufferedImage imag=ImageIO.read(new ByteArrayInputStream(bytearray)); | |
ImageIO.write(imag, "jpg", new File(dirName,"snap.jpg")); | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment