termbin/src/main/java/de/gurkengewuerz/termbin/Utils/ImageUtils.java

79 lines
2.3 KiB
Java

package de.gurkengewuerz.termbin.Utils;
import java.util.Arrays;
public class ImageUtils {
static byte[] PNG_HEADER = hexStringToByteArray("89504e470d0a1a0a");
/**
* Check if the image is a PNG. The first eight bytes of a PNG file always
* contain the following (decimal) values: 137 80 78 71 13 10 26 10 / Hex:
* 89 50 4e 47 0d 0a 1a 0a
*/
public static boolean isValidPNG(byte[] is) {
try {
byte[] b = Arrays.copyOfRange(is, 0, 8);
if (Arrays.equals(b, PNG_HEADER)) {
return true;
}
} catch (Exception e) {
//Ignore
return false;
}
return false;
}
/**
* Check if the image is a JPEG. JPEG image files begin with FF D8 and end
* with FF D9
*/
public static boolean isValidJPEG(byte[] is) {
try {
// check first 2 bytes:
byte[] b = Arrays.copyOfRange(is, 0, 2);
if ((b[0]&0xff) != 0xff || (b[1]&0xff) != 0xd8) {
return false;
}
// check last 2 bytes:
b = Arrays.copyOfRange(is, is.length - 2, is.length);
if ((b[0]&0xff) != 0xff || (b[1]&0xff) != 0xd9) {
return false;
}
} catch (Exception e) {
// Ignore
return false;
}
return true;
}
/** Check if the image is a valid GIF. GIF files start with GIF and 87a or 89a.
* http://www.onicos.com/staff/iz/formats/gif.html
*/
public static boolean isValidGIF(byte[] is) {
try {
byte[] b = Arrays.copyOfRange(is, 0, 6);
//check 1st 3 bytes
if(b[0]!='G' || b[1]!='I' || b[2]!='F') {
return false;
}
if(b[3]!='8' || !(b[4]=='7' || b[4]=='9') || b[5]!='a') {
return false;
}
} catch(Exception e) {
// Ignore
return false;
}
return true;
}
public static byte[] hexStringToByteArray(String s) {
int len = s.length();
byte[] data = new byte[len / 2];
for (int i = 0; i < len; i += 2) {
data[i / 2] = (byte) ((Character.digit(s.charAt(i), 16) << 4)
+ Character.digit(s.charAt(i+1), 16));
}
return data;
}
}