美文网首页
JPEGCodec.createJPEGDecoder在服务器上

JPEGCodec.createJPEGDecoder在服务器上

作者: 羞涩的二黄 | 来源:发表于2021-03-15 15:08 被阅读0次

    /**

    * 根据目标路径解码源文件

    */

    private static BufferedImage decodeIn(String targetFilePath) throws Exception{

    //解码当前JPEG数据流,返回BufferedImage对象

    BufferedImage buffImg = null;

    String extName=FileUtil.getFileFormat(targetFilePath);

    String fileName=FileUtil.getFileName(targetFilePath);

    String fronName=FileUtil.getFrontName(fileName);

    //文件路径

    String jpegPath=targetFilePath.replace(fileName,fronName+".jpeg");

    //转换jpeg后进行处理

    if(!extName.toLowerCase().equals("bmp")){

    toJPG(targetFilePath, jpegPath);

    }else{

    bmpTojpg(targetFilePath, jpegPath);

    }

    FileInputStream jpegIs = new FileInputStream(jpegPath);

    //执行到下面这段代码就卡着没有任何的反应 图片也没有生成

    // JPEGImageDecoder jpegDecoder = JPEGCodec.createJPEGDecoder(jpegIs);

    // buffImg = jpegDecoder.decodeAsBufferedImage();

    //使用这段代码代替上面的两行代码

    buffImg = ImageIO.read(jpegIs);

    return buffImg;

    }

    /**

    * 根据输出路径编码目标文件

    */

    private static void encodeOut(String beWaterMarkFilePath,BufferedImage buffImg){

    OutputStream os = null;

    try {

    os = new FileOutputStream(beWaterMarkFilePath);

    //创键编码器,用于编码内存中的图象数据。

    //执行到下面这段代码就卡着没有任何的反应 图片也没有生成

    // JPEGImageEncoder en = JPEGCodec.createJPEGEncoder(os);

    // en.encode(buffImg);

    //使用这段代码代替上面的两行代码

    ImageIO.write(buffImg,"jpeg",os);

    } catch (Exception e) {

    throw new BizException(BizCode.NOT_DEFINE_CODE,"FileNotFoundException水印文件"+beWaterMarkFilePath+"不存在!");

    }finally{

    try {

    if(os!=null){

    os.close();

    }

    } catch (IOException e) {

    log.info("IO流关闭异常");

    }

    }

    }

    --------------------------------------------------------------------

    JPEGImageDecoder jpegDecoder = JPEGCodec.createJPEGDecoder(jpegIs);

    buffImg = jpegDecoder.decodeAsBufferedImage();

    **替换成**

    **buffImg = ImageIO.read(jpegIs);**

    -----------------------------------------------------------------------

    JPEGImageEncoder en = JPEGCodec.createJPEGEncoder(os);

    en.encode(buffImg);

    **替换成**

    **ImageIO.write(buffImg,"jpeg",os);**

    现在项目中用到的生成jpeg的包 com.sun.image.codec.jpeg.JPEGCodec 是sun公司的私有实现的,现在过时了,导致下载失败

    解决方法,使用 ImageIO 进行图像格式文件的读写

    相关文章

      网友评论

          本文标题:JPEGCodec.createJPEGDecoder在服务器上

          本文链接:https://www.haomeiwen.com/subject/hvukcltx.html