画像をバイト配列に、またはその逆に変換したい。ここで、ユーザーはイメージの名前(.jpg
)を入力し、プログラムはファイルから読み取りになり、バイト配列に変換します。
BufferedImageは、2つの主要なクラスで構成されます。 ラスターとカラーモデル。ラスター自体は2つのクラスで構成されています。DataBufferByte画像コンテンツ用、もう1つはピクセルカラー用です。
dataBufferByteのデータが必要な場合は、次を使用します。
public byte[] extractBytes (String ImageName) throws IOException {
// open image
File imgPath = new File(ImageName);
BufferedImage bufferedImage = ImageIO.read(imgPath);
// get DataBufferBytes from Raster
WritableRaster raster = bufferedImage .getRaster();
DataBufferByte data = (DataBufferByte) raster.getDataBuffer();
return ( data.getData() );
}
これで、たとえばlsbのテキストを非表示にしてこれらのバイトを処理したり、必要に応じて処理したりできます。
JDK 7を使用している場合は、次のコードを使用できます。
import Java.nio.file.Files;
import Java.io.File;
File fi = new File("myfile.jpg");
byte[] fileContent = Files.readAllBytes(fi.toPath())
File fnew=new File("/tmp/rose.jpg");
BufferedImage originalImage=ImageIO.read(fnew);
ByteArrayOutputStream baos=new ByteArrayOutputStream();
ImageIO.write(originalImage, "jpg", baos );
byte[] imageInByte=baos.toByteArray();
このコードスニペットをお試しください
BufferedImage image = ImageIO.read(new File("filename.jpg"));
// Process image
ImageIO.write(image, "jpg", new File("output.jpg"));
これを行うためのコードの完全なバージョンを次に示します。私はそれをテストしました。 BufferedImage
および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"));
}
}
javax.imageio
、特にImageReader
とImageWriter
をチェックして、イメージファイルの読み取りと書き込みの抽象化を確認してください。
BufferedImage.getRGB(int x, int y)
thanは、指定されたピクセルのRGB値を取得できるようにします。RGB値は、バイト単位に分割できます。
注:すべての圧縮/解凍を処理する必要があるため、生のバイトを読みたくないと思います。
Java.io.FileInputStreamはあなたが探しているものです:-)
それを行う最善の方法は、最初にファイルをバイト配列に読み取り、次にImageIO.read()で配列を画像に変換することだと思います
RandomAccessFile
を使用すると簡単で便利です。
RandomAccessFile f = new RandomAccessFile(filepath, "r");
byte[] bytes = new byte[(int) f.length()];
f.read(bytes);
f.close();