java图片缩放与裁剪

import java.awt.Graphics;
import java.awt.Image;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import javax.imageio.ImageIO;

import com.alibaba.druid.util.StringUtils;
import com.jfinal.kit.StrKit;
import com.sun.image.codec.jpeg.JPEGCodec;
import com.sun.image.codec.jpeg.JPEGEncodeParam;
import com.sun.image.codec.jpeg.JPEGImageEncoder;

import java.awt.image.BufferedImage;
import java.rmi.registry.Registry;

@SuppressWarnings("restriction")
public class ImageKit {
    private  final static  String[] imgExts=new String[]{"jpg", "jpeg", "png", "bmp"};

    public static  String getExtName(String fileName){
        if(StringUtils.isEmpty(fileName)) return null;
        int idx=fileName.lastIndexOf(‘.‘);
        if(idx!=-1&&(idx+1)<fileName.length()){
            return fileName.substring(idx+1);
        }else{
            return null;
        }
    }
    //通过文件扩展名,是否为支持的图片文件
    public static boolean isImageExtName(String fileName){
        if(StrKit.isBlank(fileName)){
            return false;
        }
        fileName=fileName.trim().toLowerCase();
        String ext=getExtName(fileName);
        if(StringUtils.isEmpty(ext)) return false;
        for (String str:imgExts){
            if(str.equals(ext)){
                return true;
            }
        }
        return false;
    }

    public static  final boolean notImageExtName(String fileName){
        return !isImageExtName(fileName);
    }
    public static BufferedImage loadImageFils(String sourceImageFileName){
        if(notImageExtName(sourceImageFileName)){
            throw new IllegalArgumentException("只支持如下几种类型的图像文件:jpg、jpeg、png、bmp");
        }
        File sourceImageFile=new File(sourceImageFileName);
        if(!sourceImageFile.exists()||!sourceImageFile.isFile()){
            throw new IllegalArgumentException("文件不存在");
        }
        try {
            return ImageIO.read(sourceImageFile);
        }catch (Exception e){
            throw new RuntimeException(e);
        }
    }

    public  static  void zoom(int maxWidth,File srcFile,String saveFile){
        float quality=0.8f;
        try {
            BufferedImage srcImage = ImageIO.read(srcFile);
            int srcWidth = srcImage.getWidth();
            int srcHeight = srcImage.getHeight();
            if(srcWidth<=maxWidth){
                saveWithQuality(srcImage, quality, saveFile);
            }else {
                float scalingRatio=(float) maxWidth/(float)srcWidth;
                float maxHeight = ((float)srcHeight * scalingRatio);
                BufferedImage ret=resize(srcImage,maxWidth,(int) maxHeight);
                saveWithQuality(ret, quality, saveFile);
            }
        }catch (Exception e) {
            throw new RuntimeException(e);
        }
    }

    public static  BufferedImage crop(String sourceImageFile,int left, int top, int width, int height){
        if (notImageExtName(sourceImageFile)) {
            throw new IllegalArgumentException("只支持如下几种类型的图像文件:jpg、jpeg、png、bmp");
        }
        try {
              BufferedImage bi= ImageIO.read(new File(sourceImageFile));
              width = Math.min(width, bi.getWidth());
              height = Math.min(height, bi.getHeight());
              if(width <= 0) width = bi.getWidth();
              if(height <= 0) height = bi.getHeight();

              left = Math.min(Math.max(0, left), bi.getWidth() - width);
              top = Math.min(Math.max(0, top), bi.getHeight() - height);

              return bi.getSubimage(left,top,width,height);
        }catch (Exception e){
            throw new RuntimeException(e);
        }
    }

    public static  void save(BufferedImage bi,String outputImageFile){
        FileOutputStream newImage=null;
        try {
            ImageIO.write(bi,getExtName(outputImageFile),new File(outputImageFile));
        } catch(Exception e){
            throw new RuntimeException(e);
        } finally {
            if(newImage!=null){
                try {
                    newImage.close();
                } catch (IOException e) {
                    throw new RuntimeException(e);
                }
            }
        }
    }

    public static BufferedImage resize(BufferedImage bi, int toWidth, int toHeight) {
           Graphics g=null;
           try {
               Image scaledImage = bi.getScaledInstance(toWidth, toHeight, Image.SCALE_SMOOTH);
               BufferedImage ret = new BufferedImage(toWidth, toHeight, BufferedImage.TYPE_INT_RGB);
               g = ret.getGraphics();
               g.drawImage(scaledImage, 0, 0, null);
               return ret;
           } catch (Exception e) {
               throw new RuntimeException(e);
           } finally {
               if (g != null) {
                   g.dispose();
               }
           }
    }

    public static  void saveWithQuality(BufferedImage im, float quality, String outputImageFile){
        FileOutputStream   newImage = null;
        try {
            newImage = new FileOutputStream(outputImageFile);
            JPEGImageEncoder encoder=JPEGCodec.createJPEGEncoder(newImage);
            JPEGEncodeParam jep = JPEGCodec.getDefaultJPEGEncodeParam(im);
            jep.setQuality(quality, true);
            encoder.encode(im, jep);
        }catch (Exception e) {
            throw new RuntimeException(e);
        } finally {
            if (newImage != null) {
                try {newImage.close();} catch (IOException e) {throw new RuntimeException(e);}
            }
        }
    }

}

  

原文地址:https://www.cnblogs.com/sunliyuan/p/10669630.html

时间: 2024-10-27 03:57:49

java图片缩放与裁剪的相关文章

PHP图片缩放,裁剪和压缩

Google PageSpeed Insights可以对网页加载速度评分,并给出优化建议 简单来说,优化图片即使用合适尺寸的图片(缩放,裁剪),压缩图片 这里只介绍jpng和png两种图片格式 软件准备: imagemagick apt-get install imagemagick   jpegtran apt-get install libjpeg-turbo-progs   optipng apt-get install optipng pngquant apt-get install p

java 图片缩放

使用java自带的图片处理api,也可以使用(GraphicsMagick + im4j) import java.awt.Image; import java.awt.image.BufferedImage; Image img = ImageIO.read(file.getInputStream());//读入图片 BufferedImage tag = new BufferedImage(newWidth, newHeight, BufferedImage.TYPE_INT_RGB); /

java图片缩放

package com.rubekid.springmvc.utils; import java.awt.AlphaComposite; import java.awt.Graphics2D; import java.awt.geom.AffineTransform; import java.awt.image.AffineTransformOp; import java.awt.image.BufferedImage; import java.io.File; import java.io.F

Android实战技巧之四十七:不用预览拍照与图片缩放剪裁

副标题:Take Picture without preview Android Google出于对隐私的保护,制定了一条门槛,即在Android应用开发中编写拍照程序是必需要有图像预览的.这会对那些恶意程序比如Android中泛滥的Service在后台偷偷记录手机用户的行为与周边信息.这样的门槛还包括手机厂商自带的相机软件在拍照时必须是有声音,这样要避免一些偷拍的情况. 处于技术调研与一些特殊无害场景的使用,我们要用到不用预览的拍照.此文就是以此为背景,做的一些调研.只是用不多与五款手机测试,

java实现的图片缩放 压缩 裁剪工具!找了很久,市面上再也找不到比它缩放效果还好的代码了

原文:java实现的图片缩放 压缩 裁剪工具!找了很久,市面上再也找不到比它缩放效果还好的代码了 源代码下载地址:http://www.zuidaima.com/share/1550463380458496.htm 纯 java 实现的 图片缩放 压缩 裁剪工具!不依赖任何第三方 jar 包 1. 找了很久,市面上再也找不到比它缩放效果还好的代码了 (再不使用任何第三方组件的前提下) 2. 支持缩放 3. 支持剪切 (例如:用户上传头像后剪切成正方形小图) /* * Copyright 2012

java 图片裁剪

图片裁剪功能,我一直以为是前端那边去做,后台不用做过多的考虑,现在我发现,前端去做裁剪好像不是太理想,我在这里简单地介绍一下我们大java的裁剪功能 前端只需要上传,x (x轴),y(y轴) , h(高), w(宽),以上几个坐标点即可 以下是原图 裁剪之后 代码如下,需要引入jar public static void main(String[] args) { // 在 C 盘的根目录有一张 1.jpg 的图片 File fromPic = new File("C:\\1.jpg"

C#图片处理示例(裁剪,缩放,清晰度,水印)

吴剑 2011-02-20 原创文章,转载必需注明出处:http://www.cnblogs.com/wu-jian/ 前言 需求源自项目中的一些应用,比如相册功能,通常用户上传相片后我们都会针对该相片再生成一张缩略图,用于其它页面上的列表显示.随便看一下,大部分网站基本都是将原图等比缩放来生成缩略图.但完美主义者会发现一些问题,比如显示排版时想让相片缩略图列表非常统一.整齐.和美观,比如要求每张缩略图大小固定为120 x 90且不拉伸变形怎么办?再比如用户头像如何让缩略图比原图更清晰?或是如何

java 图片裁剪上传变红等失真现象、cmyk颜色模式图片裁剪异常现象处理

1.本文仅为了提供图片上传过程中,部分java图片处理代码. 2.以下代码可以解决部分图片上传裁剪后整体变红等失真现象. 3.以下代码支持cmyk颜色模式的图片上传裁剪. /**  * 图片裁剪  * @param srcImageFile 裁剪前图片地址  * @param dirImageFile 裁剪后图片地址  * @param x   图片裁剪属性  * @param y   图片裁剪属性  * @param destWidth  图片裁剪属性  * @param destHeight

图片缩放时java.lang.IllegalArgumentException: pointerIndex out of range

06-03 20:45:24.143: E/AndroidRuntime(1230): FATAL EXCEPTION: main 06-03 20:45:24.143: E/AndroidRuntime(1230): java.lang.IllegalArgumentException: pointerIndex out of range 06-03 20:45:24.143: E/AndroidRuntime(1230): at android.view.MotionEvent.native