等比例缩小图片详解编程语言

直接上代码:

package com.henu.test; 
 
import java.awt.Color; 
import java.awt.Graphics; 
import java.awt.Image; 
import java.awt.image.BufferedImage; 
import java.io.File; 
import java.io.IOException; 
import java.util.Arrays; 
import javax.imageio.ImageIO; 
import org.slf4j.Logger; 
import org.slf4j.LoggerFactory; 
 
public class ImageUtil { 
 
    private Logger log = LoggerFactory.getLogger(getClass()); 
 
    private static String DEFAULT_PREVFIX = "thumb_"; 
    private static Boolean DEFAULT_FORCE = false;//建议该值为false 
 
    /** 
     * <p>Title: thumbnailImage</p> 
     * <p>Description: 根据图片路径生成缩略图 </p> 
     * @param imagePath    原图片路径 
     * @param w            缩略图宽 
     * @param h            缩略图高 
     * @param prevfix    生成缩略图的前缀 
     * @param force        是否强制按照宽高生成缩略图(如果为false,则生成最佳比例缩略图) 
     */ 
    public void thumbnailImage(String imagePath, int w, int h, String prevfix, boolean force){ 
        File imgFile = new File(imagePath); 
        if(imgFile.exists()){ 
            try { 
                // ImageIO 支持的图片类型 : [BMP, bmp, jpg, JPG, wbmp, jpeg, png, PNG, JPEG, WBMP, GIF, gif] 
                String types = Arrays.toString(ImageIO.getReaderFormatNames()); 
                String suffix = null; 
                // 获取图片后缀 
                if(imgFile.getName().indexOf(".") > -1) { 
                    suffix = imgFile.getName().substring(imgFile.getName().lastIndexOf(".") + 1); 
                }// 类型和图片后缀全部小写,然后判断后缀是否合法 
                if(suffix == null || types.toLowerCase().indexOf(suffix.toLowerCase()) < 0){ 
                    log.error("Sorry, the image suffix is illegal. the standard image suffix is {}." + types); 
                    return ; 
                } 
                log.debug("target image's size, width:{}, height:{}.",w,h); 
                Image img = ImageIO.read(imgFile); 
                if(!force){ 
                    // 根据原图与要求的缩略图比例,找到最合适的缩略图比例 
                    int width = img.getWidth(null); 
                    int height = img.getHeight(null); 
                    if((width*1.0)/w < (height*1.0)/h){ 
                        if(width > w){ 
                            h = Integer.parseInt(new java.text.DecimalFormat("0").format(height * w/(width*1.0))); 
                            log.debug("change image's height, width:{}, height:{}.",w,h); 
                        } 
                    } else { 
                        if(height > h){ 
                            w = Integer.parseInt(new java.text.DecimalFormat("0").format(width * h/(height*1.0))); 
                            log.debug("change image's width, width:{}, height:{}.",w,h); 
                        } 
                    } 
                } 
                BufferedImage bi = new BufferedImage(w, h, BufferedImage.TYPE_INT_RGB); 
                Graphics g = bi.getGraphics(); 
                g.drawImage(img, 0, 0, w, h, Color.LIGHT_GRAY, null); 
                g.dispose(); 
                String p = imgFile.getPath(); 
                // 将图片保存在原目录并加上前缀 
                ImageIO.write(bi, suffix, new File(p.substring(0,p.lastIndexOf(File.separator)) + File.separator + prevfix +imgFile.getName())); 
                log.debug("缩略图在原路径下生成成功"); 
            } catch (IOException e) { 
               log.error("generate thumbnail image failed.",e); 
            } 
        }else{ 
            log.warn("the image is not exist."); 
        } 
    } 
 
    public static void main(String[] args) { 
        new ImageUtil().thumbnailImage("D:/test/1.jpg", 510, 288, DEFAULT_PREVFIX,DEFAULT_FORCE); 
    } 
}

 

原创文章,作者:ItWorker,如若转载,请注明出处:https://blog.ytso.com/tech/pnotes/16036.html

(0)
上一篇 2021年7月19日 18:58
下一篇 2021年7月19日 18:58

相关推荐

发表回复

登录后才能评论