在工作中遇到了一个将bmp文件转为jpg文件的工作(因为bmp文件太大,后期的处理可能遇到问题,所以转为jpg会有失真,但对我们的程序不会有太大影响。),对于bmp转jpg的话java本身就提供了很好的支持,所以不用过多的关注,如果不知道的话可以看看下面的文章:
地址--http://blog.csdn.net/shixing_11/article/details/5731050
但是,对于图片的格式通过后缀名判断是不准确的,因为我们可以去手动的更改后缀名,但是文件大小和本质是不会变的,所以要用java对文件进行判断,如果是bmp文件就转成jpg,如果不是直接入库。从网上找了几个方法,试了下下面的好使,不说废话直接上代码(有部分改动,也可以更改之后判断用作上传的是不是图片)。
public static String getImageType(String path) throws IOException {
FileInputStream fis = new FileInputStream(path);
int leng = fis.available();
BufferedInputStream buff = new BufferedInputStream(fis);
byte[] mapObj = new byte[leng];
buff.read(mapObj, 0, leng);
String type = "";
ByteArrayInputStream bais = null;
MemoryCacheImageInputStream mcis = null;
try {
bais = new ByteArrayInputStream(mapObj);
mcis = new MemoryCacheImageInputStream(bais);
Iterator itr = ImageIO.getImageReaders(mcis);
while (itr.hasNext()) {
ImageReader reader = (ImageReader) itr.next();
String imageName = reader.getClass().getSimpleName();
if(imageName!=null){
if("GIFImageReader".equals(imageName)){
type = "gif";
}else if("JPEGImageReader".equals(imageName)){
type = "jpg";
}else if("PNGImageReader".equals(imageName)){
type = "png";
}else if("BMPImageReader".equals(imageName)){
type = "bmp";
}else{
type = "noPic";
}
}
}
}catch (Exception e) {
type = "noPic";
} finally {
if (bais != null) {
try {
bais.close();
} catch (IOException ioe) {
}
}
if (mcis != null) {
try {
mcis.close();
} catch (IOException ioe) {
}
}
}
return type;
}
希望对大家有帮助