在工作中遇到了一个将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; }
希望对大家有帮助