java 实现jpg、png、tif、gif 任意图像格式转换

根据企业真实需求背景,java实现jpg、png、tif、gif 任意图像格式转换

方法名 说明
imageConvertCommon 任意图像转换通用类
imageConvertToGIF 图像任意格式转gif
imageConvertToTif 图像任意格式转tif
imageConvertToJPG 图像任意格式转jpg
imageConvertToPNG 图像任意格式转png
1
2
3
4
涉及的jar包,由于jar收拾收费的因此,大家可以去我的开源项目中,
下载需要的jar饱即可(见文章底部)
jai_imageio.jar
jimi-1.0.jar
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
package com.gblfy.util;

import com.sun.jimi.core.Jimi;
import com.sun.jimi.core.JimiException;
import com.sun.jimi.core.JimiWriter;
import com.sun.jimi.core.options.JPGOptions;
import com.sun.jimi.core.options.PNGOptions;

import javax.imageio.ImageIO;
import java.awt.image.BufferedImage;
import java.awt.image.ImageProducer;
import java.io.File;

/*******************************************************************************
 *
 * @direction: 图像格式转换类(转换时不需要关心源图的格式)
 * @support  : GIF(no compressed encoding), JPEG, TIFF, PNG, PICT, BMP, Targa,
 *             ICO, CUR, XBM, XPM, PCX, DCX
 * @author  :  gblfy
 ******************************************************************************/
public class ImageConverUtil {
    /**
     * 任意图片转换
     *
     * @param sSourceImage 源图片
     * @param sDestImage   转换后的图片
     * @param fileSuffix   转换后的图片扩展名
     * @return
     */
    public static boolean imageConvertCommon(String sSourceImage, String sDestImage, String fileSuffix) {
        if (sSourceImage == null || sSourceImage.trim().equals("")) {
            System.out.println("JimiImageUtil.convertTo" + fileSuffix.toUpperCase() + "() : 要转换的源图像文件路径不能为空!");
            return false;
        }

        if (sDestImage == null || sDestImage.trim().equals("")) {
            sDestImage = sSourceImage.substring(0, sSourceImage.lastIndexOf(".")) + fileSuffix;
        } else if (!sDestImage.endsWith(fileSuffix)) {
            sDestImage += fileSuffix;
        }
        //检查源图像文件
        File tSourceImageFile = new File(sSourceImage);
        if (!tSourceImageFile.exists()) {
            System.out.println("JimiImageUtil.convertTo" + fileSuffix.toUpperCase() + "() : 要转换的源图像文件路径不存在!");
            return false;
        } else if (!tSourceImageFile.canRead()) {
            System.out.println("JimiImageUtil.convertTo" + fileSuffix.toUpperCase() + "(): 要转换的源图像文件路径不可读!");
            return false;
        } else if (!tSourceImageFile.isFile()) {
            System.out.println("JimiImageUtil.convertTo" + fileSuffix.toUpperCase() + "() : 要转换的源图像路径不是一个有效的文件名!");
            return false;
        }
        long lRunStartTime = System.currentTimeMillis();

        try {
            BufferedImage bi = ImageIO.read(tSourceImageFile);
            if (bi == null) {
                //图片解码错误
                System.out.println("Jre:" + System.getProperty("java.version"));
                System.out.println(" JimiImageUtil.convertTo" + fileSuffix.toUpperCase() + "() : 要转换的源图像解码错误!");
                return false;
            }
            if (!ImageIO.write(bi, fileSuffix, new File(sDestImage))) {
                System.out.println(" JimiImageUtil.convertTo" + fileSuffix.toUpperCase() + "() : 转换图像格式发生异常!");
                return false;
            }
            long lRunEndTime = System.currentTimeMillis();
            long lRunTime = lRunEndTime - lRunStartTime;
            System.out.println(" JimiImageUtil.convertToJPG() 运行时间 : " + lRunTime + " 毫秒");
        } catch (Exception e) {
            System.out.println(" JimiImageUtil.convertTo" + fileSuffix.toUpperCase() + "() : 转换图像格式发生异常!");
            return false;
        }
        return true;
    }

    /**
     * 图片转gif
     *
     * @param sSourceImage 源图片的绝对路径  D:\5\1.jpg D:\5\1.png
     * @param sDestImage   转换后的gif图片路径  D:\5\1.gif
     * @return
     */
    public static boolean imageConvertToGIF(String sSourceImage, String sDestImage) {
        if (sSourceImage == null || sSourceImage.trim().equals("")) {
            System.out.println(" JimiImageUtil.convertToGIF() : 要转换的源图像文件路径不能为空!");
            return false;
        }

        if (sDestImage == null || sDestImage.trim().equals("")) {
            sDestImage = sSourceImage.substring(0, sSourceImage.lastIndexOf(".")) + ".gif";
        } else if (!sDestImage.endsWith(".gif")) {
            sDestImage += ".gif";
        }

        //检查源图像文件
        File tSourceImageFile = new File(sSourceImage);
        if (!tSourceImageFile.exists()) {
            System.out.println(" JimiImageUtil.convertToGIF() : 要转换的源图像文件路径不存在!");
            return false;
        } else if (!tSourceImageFile.canRead()) {
            System.out.println(" JimiImageUtil.convertToGIF() : 要转换的源图像文件路径不可读!");
            return false;
        } else if (!tSourceImageFile.isFile()) {
            System.out.println(" JimiImageUtil.convertToGIF() : 要转换的源图像路径不是一个有效的文件名!");
            return false;
        }
        try {
            BufferedImage bi = ImageIO.read(tSourceImageFile);
            if (bi == null) {
                //图片解码错误
                System.out.println("Jre:" + System.getProperty("java.version"));
                System.out.println(" JimiImageUtil.convertToGIF() : 要转换的源图像解码错误!");
                return false;
            }
            if (!ImageIO.write(bi, "gif", new File(sDestImage))) {
                System.out.println(" JimiImageUtil.convertToGIF() : 转换图像格式发生异常!");
                return false;
            }
        } catch (Exception e) {
            System.out.println(" JimiImageUtil.convertToGIF() : 转换图像格式发生异常!");
            return false;
        }
        return true;
    }

    /**
     * 图片转Tif
     *
     * @param sSourceImage
     * @param sDestImage
     * @return
     */
    public static boolean imageConvertToTif(String sSourceImage, String sDestImage) {
        if (sSourceImage == null || sSourceImage.trim().equals("")) {
            System.out.println(" JimiImageUtil.convertToGIF() : 要转换的源图像文件路径不能为空!");
            return false;
        }

        if (sDestImage == null || sDestImage.trim().equals("")) {
            sDestImage = sSourceImage.substring(0, sSourceImage.lastIndexOf(".")) + ".tif";
        } else if (!sDestImage.endsWith(".tif")) {
            sDestImage += ".tif";
        }

        //检查源图像文件
        File tSourceImageFile = new File(sSourceImage);
        if (!tSourceImageFile.exists()) {
            System.out.println(" JimiImageUtil.convertToTif() : 要转换的源图像文件路径不存在!");
            return false;
        } else if (!tSourceImageFile.canRead()) {
            System.out.println(" JimiImageUtil.convertToTif() : 要转换的源图像文件路径不可读!");
            return false;
        } else if (!tSourceImageFile.isFile()) {
            System.out.println(" JimiImageUtil.convertToTif() : 要转换的源图像路径不是一个有效的文件名!");
            return false;
        }
        try {
            BufferedImage bi = ImageIO.read(tSourceImageFile);
            if (bi == null) {
                //图片解码错误
                System.out.println("Jre:" + System.getProperty("java.version"));
                System.out.println(" JimiImageUtil.convertToTif() : 要转换的源图像解码错误!");
                return false;
            }
            if (!ImageIO.write(bi, "tif", new File(sDestImage))) {
                System.out.println(" JimiImageUtil.convertToTif() : 转换图像格式发生异常!");
                return false;
            }
        } catch (Exception e) {
            System.out.println("JimiImageUtil.convertToTif() : 转换图像格式发生异常!");
            return false;
        }
        return true;
    }

    /**
     * 转换图像格式为 JPG
     *
     * @param sSourceImage, 其它格式的源图像文件路径
     * @param sDestImage,   目标 JPG 图像文件存放路径
     * @param nQuality,     品质, 0-100, 数值越高品质越好
     * @return
     */
    public static boolean imageConvertToJPG(String sSourceImage, String sDestImage, int nQuality) {
        if (sSourceImage == null || sSourceImage.trim().equals("")) {
            System.out.println(" JimiImageUtil.convertToJPG() : 要转换的源图像文件路径不能为空!");
            return false;
        }

        if (sDestImage == null || sDestImage.trim().equals("")) {
            sDestImage = sSourceImage.substring(0, sSourceImage.lastIndexOf(".")) + ".jpg";
        } else if (!sDestImage.endsWith(".jpg")) {
            sDestImage += ".jpg";
        }

        //检查源图像文件
        File tSourceImageFile = new File(sSourceImage);
        if (!tSourceImageFile.exists()) {
            System.out.println(" JimiImageUtil.convertToJPG() : 要转换的源图像文件路径不存在!");
            return false;
        } else if (!tSourceImageFile.canRead()) {
            System.out.println(" JimiImageUtil.convertToJPG() : 要转换的源图像文件路径不可读!");
            return false;
        } else if (!tSourceImageFile.isFile()) {
            System.out.println(" JimiImageUtil.convertToJPG() : 要转换的源图像路径不是一个有效的文件名!");
            return false;
        }
        tSourceImageFile = null;
        try {
            long lRunStartTime = System.currentTimeMillis();
            JPGOptions tJPGOptions = new JPGOptions();
            if (nQuality < 0 || nQuality > 100) {
                tJPGOptions.setQuality(75);
            } else {
                tJPGOptions.setQuality(nQuality);
            }
            ImageProducer tImageProducer = Jimi.getImageProducer(sSourceImage);
            JimiWriter tJimiWriter = Jimi.createJimiWriter(sDestImage);
            tJimiWriter.setSource(tImageProducer);
            tJimiWriter.setOptions(tJPGOptions);
            tJimiWriter.putImage(sDestImage);
            tImageProducer = null;
            tJimiWriter = null;
            tJPGOptions = null;
            long lRunEndTime = System.currentTimeMillis();
            long lRunTime = lRunEndTime - lRunStartTime;
            System.out.println(" JimiImageUtil.convertToJPG() 运行时间 : " + lRunTime + " 毫秒");
        } catch (JimiException je) {
            System.out.println(" JimiImageUtil.convertToJPG() : 转换图像格式发生异常!");
            je.printStackTrace();
            return false;
        } catch (Exception ex) {
            ex.printStackTrace();
            return false;
        }
        return true;
    }

    /**
     * 转换图像格式为 PNG
     *
     * @param sSourceImage , 其它格式的源图像文件路径
     * @param sDestImage   ,目标 PNG 图像文件存放路径
     * @param sCompression ,压缩比, none, default, fast, max
     * @return
     */
    public static boolean imageConvertToPNG(String sSourceImage, String sDestImage, String sCompression) {
        if (sSourceImage == null || sSourceImage.trim().equals("")) {
            System.out.println(" JimiImageUtil.convertToPNG() : 要转换的源图像文件路径不能为空!");
            return false;
        }
        if (sDestImage == null || sDestImage.trim().equals("")) {
            sDestImage = sSourceImage.substring(0, sSourceImage.lastIndexOf(".")) + ".png";
        } else if (!sDestImage.endsWith(".png")) {
            sDestImage += ".png";
        }
        //----------------------------------------------------------------------
        //检查源图像文件
        File tSourceImageFile = new File(sSourceImage);
        if (!tSourceImageFile.exists()) {
            System.out.println(" JimiImageUtil.convertToPNG() : 要转换的源图像文件路径不存在!");
            return false;
        } else if (!tSourceImageFile.canRead()) {
            System.out.println(" JimiImageUtil.convertToPNG() : 要转换的源图像文件路径不可读!");
            return false;
        } else if (!tSourceImageFile.isFile()) {
            System.out.println(" JimiImageUtil.convertToPNG() : 要转换的源图像路径不是一个有效的文件名!");
            return false;
        }
        tSourceImageFile = null;

        try {
            long lRunStartTime = System.currentTimeMillis();
            PNGOptions tPNGOptions = new PNGOptions();
            if (sCompression == null || sCompression.trim().equals("")) {
                tPNGOptions.setCompressionType(PNGOptions.COMPRESSION_DEFAULT);
            } else if (sCompression.equalsIgnoreCase("none")) {
                tPNGOptions.setCompressionType(PNGOptions.COMPRESSION_NONE);
            } else if (sCompression.equalsIgnoreCase("fast")) {
                tPNGOptions.setCompressionType(PNGOptions.COMPRESSION_FAST);
            } else if (sCompression.equalsIgnoreCase("max")) {
                tPNGOptions.setCompressionType(PNGOptions.COMPRESSION_MAX);
            } else {
                tPNGOptions.setCompressionType(PNGOptions.COMPRESSION_DEFAULT);
            }
            ImageProducer tImageProducer = Jimi.getImageProducer(sSourceImage);
            JimiWriter tJimiWriter = Jimi.createJimiWriter(sDestImage);
            tJimiWriter.setSource(tImageProducer);
            tJimiWriter.setOptions(tPNGOptions);
            tJimiWriter.putImage(sDestImage);
            tImageProducer = null;
            tJimiWriter = null;
            tPNGOptions = null;
            long lRunEndTime = System.currentTimeMillis();
            long lRunTime = lRunEndTime - lRunStartTime;
            System.out.println(" JimiImageUtil.convertToPNG() 运行时间 : " + lRunTime + " 毫秒");
        } catch (JimiException je) {
            System.out.println(" JimiImageUtil.convertToPNG() : 转换图像格式发生异常!");
            je.printStackTrace();
            return false;
        } catch (Exception ex) {
            ex.printStackTrace();
            return false;
        }
        return true;
    }

    public static void main(String[] args) {

        // jpg png gif tif 图片格式互转
        String inputFilePath = "D:" + File.separator + "7" + File.separator + "1.jpg";
        String outputFilePath = "D:" + File.separator + "7" + File.separator + "1.tif";
        String fileSuffix = "tif";
        ImageConverUtil.imageConvertCommon(outputFilePath, inputFilePath, fileSuffix);
        System.out.println("-----------------执行完成-------------");

        //png /jpg 转tif
        // String inputFilePath = "D:" + File.separator + "6" + File.separator + "1.jpg";
        // String inputFilePath = "D:" + File.separator + "6" + File.separator + "1.png";
        // String outputFilePath = "D:" + File.separator + "6" + File.separator + "1.tif";
        // ImageConverUtil.imageConvertToTif(inputFilePath, outputFilePath);
        // System.out.println("-----------------执行完成-------------");

        //png /jpg 转gif
        // String inputFilePath = "D:" + File.separator + "5" + File.separator + "1.png";
        // String inputFilePath = "D:" + File.separator + "5" + File.separator + "1.jpg";
        // String outputFilePath = "D:" + File.separator + "5" + File.separator + "1.gif";
        // ImageConverUtil.imageConvertToGIF(inputFilePath, outputFilePath);
        // System.out.println("-----------------执行完成-------------");

        // png转jpg
        // String inputFilePath = "D:" + File.separator + "4" + File.separator + "1.tif";
        // String outputFilePath = "D:" + File.separator + "4" + File.separator + "1.jpg";
        // ImageConverUtil.imageConvertToJPG(inputFilePath, outputFilePath, 100);
        // System.out.println("-----------------执行完成-------------");

        // jpg 转png
        // String inputFilePath = "D:" + File.separator + "3" + File.separator + "1.jpg";
        // String outputFilePath = "D:" + File.separator + "3" + File.separator + "1.png";
        // ImageConverUtil.imageConvertToPNG(inputFilePath, outputFilePath, "default");
        // System.out.println("-----------------执行完成-------------");
    }
}