2013-06-19 17 views
7

Tôi có một hình ảnh ở định dạng byte[] mảng trong mã Java của tôi. Tôi muốn các thông tin sau được trích xuất từ ​​mảng đó. Làm thế nào tôi có thể làm điều đó càng nhanh càng tốt.Trích xuất chiều rộng, chiều cao, màu sắc và loại hình ảnh từ mảng byte

  • Width
  • Chiều cao
  • Color (màu đen & trắng, màu hoặc trong suốt? Nếu màu sắc, màu sắc chính là những gì?)
  • Loại (Là hình ảnh PNG, GIF, JPEG, vv)
+1

Trích xuất loại thông tin đó bằng cách sử dụng các hoạt động bitwise trên mảng byte của bạn là một nhiệm vụ lớn. Tôi sẽ sử dụng một số thư viện cho điều đó. – Simon

+0

Tạo hình ảnh của một số loại (có thể sử dụng 'ImageIO') và trích xuất các thuộc tính hình ảnh – MadProgrammer

+0

@Simon Tôi không gặp vấn đề gì khi sử dụng thư viện. –

Trả lời

9

Sử dụng ImageIO để đọc dưới dạng hình ảnh đệm và sau đó tải những thứ liên quan mà bạn muốn. Xem tài liệu java tại http://docs.oracle.com/javase/6/docs/api/javax/imageio/ImageIO.html.

import java.awt.image.BufferedImage; 
import java.io.ByteArrayInputStream; 
import java.io.IOException; 
import java.io.InputStream; 

import javax.imageio.ImageIO; 


public class Test { 

    /** 
    * @param args 
    * @throws IOException 
    */ 
    public static void main(String[] args) throws IOException { 
     // assuming that picture is your byte array 
     byte[] picture = new byte[30]; 

     InputStream in = new ByteArrayInputStream(picture); 

     BufferedImage buf = ImageIO.read(in); 
     ColorModel model = buf.getColorModel(); 
     int height = buf.getHeight(); 

    } 

} 
+0

Bạn có thể vui lòng cho tôi một đoạn mã không? Tôi thực sự đánh giá cao nó. –

+0

Đặc biệt đối với phần màu. –

+0

Cảm ơn bạn đã chỉnh sửa. Làm thế nào về thông tin màu sắc? Có thể với 'BufferedImage'? Cảm ơn. –

5

Để có được loại hình ảnh từ mảng byte, bạn có thể làm điều gì đó như:

byte[] picture = new byte[30]; 
ImageInputStream iis = ImageIO.createImageInputStream(new ByteArrayInputStream(picture)); 

Iterator<ImageReader> readers = ImageIO.getImageReaders(iis); 
while (readers.hasNext()) { 
    ImageReader read = readers.next(); 
    System.out.println("format name = " + read.getFormatName()); 
} 

Dưới đây là đầu ra tôi có cho các tập tin khác nhau:

format name = png 
format name = JPEG 
format name = gif 

Nó được lấy cảm hứng từ:

Convert Byte Array to image in Java - without knowing the type

+0

làm việc fr tôi ... thnks :) –

+0

Cool. ..Cảm ơn !! –