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);}
}
}
} }

  

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

  1. java图片缩放

    package com.rubekid.springmvc.utils; import java.awt.AlphaComposite; import java.awt.Graphics2D; imp ...

  2. php使用imagick模块实现图片缩放、裁剪、压缩示例

    PHP 使用Imagick模块 缩放,裁剪,压缩图片 包括gif图片 缩放 裁剪 复制代码代码如下: /**  * 图片裁剪  * 裁剪规则:  *   1. 高度为空或为零   按宽度缩放 高度自适 ...

  3. .NetCore实现图片缩放与裁剪 - 基于ImageSharp

    前言 (突然发现断更有段时间了 最近在做博客的时候,需要实现一个类似Lorempixel.LoremPicsum这样的随机图片功能,图片有了,还需要一个根据输入的宽度高度获取图片的功能,由于之前处理图 ...

  4. java 图片缩放

    使用java自带的图片处理api,也可以使用(GraphicsMagick + im4j) import java.awt.Image; import java.awt.image.BufferedI ...

  5. java多图片上传--前端实现预览--图片压缩 、图片缩放,区域裁剪,水印,旋转,保持比例。

    java多图片上传--前端实现预览 前端代码: https://pan.baidu.com/s/1cqKbmjBSXOhFX4HR1XGkyQ 解压后: java后台: <!--文件上传--&g ...

  6. 用Js+css3实现图片旋转,缩放,裁剪,滤镜

    还是前端图片的老话题,花了半天时间,东拼西凑,凑出个demo,优点在于代码少,核心代码就6行,目前刚做了旋转,缩放,裁剪,滤镜要js做,网络上也有现成的代码, 但是想做到自定义的滤镜咋办呢?这还要从底 ...

  7. java 图片裁剪

    图片裁剪功能,我一直以为是前端那边去做,后台不用做过多的考虑,现在我发现,前端去做裁剪好像不是太理想,我在这里简单地介绍一下我们大java的裁剪功能 前端只需要上传,x (x轴),y(y轴) , h( ...

  8. PHP图片裁剪_图片缩放_PHP生成缩略图

    在制作网页过程中,为了排版整齐美观,对网页中的图片处理成固定大小尺寸的图片,或是要截去图片边角中含有水印的图片,对于图片量多,每天更新大量图,靠人工PS处理是不现实的,那么有没有自动处理图片的程序了! ...

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

    C#图片处理示例(裁剪,缩放,清晰度,水印) 吴剑 2011-02-20 原创文章,转载必需注明出处:http://www.cnblogs.com/wu-jian/ 前言 需求源自项目中的一些应用,比 ...

随机推荐

  1. WinForm登录验证

    概述:输错三次禁止登陆,15分钟后才能继续. 图示: Form1代码: using System; using System.Configuration; using System.Data.SqlC ...

  2. Django ORM操作补充

    操作补充 only 只取某些去除其他 defer 去除某些取其他 # 需求: 只取某n列 queryset=[ {},{}] models.User.objects.all().values( 'id ...

  3. Vue(小案例_vue+axios仿手机app)_上拉加载

    ---恢复内容开始--- 一.前言                                                                                    ...

  4. CMDB资产管理系统开发【day26】:Django admin

    想实现的是一个表里面的字段 选择性的出现在菜单栏 1.如何自定义菜单 自定义菜单前 在asset\admin.py里添加如下代码: class NewAssetApprovalZoneAdmin(ad ...

  5. 金融量化分析【day111】:Matplotib-图标标注

    一.图像标注 1.股票 df = pd.read_csv('601318.csv') df.plot() plt.plot([1,3,4,5]) plt.plot([5,8,7,9]) plt.tit ...

  6. 图解Tomcat类加载机制(阿里面试题)

    Tomcat的类加载机制是违反了双亲委托原则的,对于一些未加载的非基础类(Object,String等),各个web应用自己的类加载器(WebAppClassLoader)会优先加载,加载不到时再交给 ...

  7. C++回顾day03---<类型转换>

    一:C++类型转换 (一)static_cast<>() 静态类型转换:基本类型可以转换但是指针类型不允许.可以进行隐式类型转换 double n=1.23 int m=static_ca ...

  8. Vim使用技巧:vimtutor

    一 写在开头1.1 本文内容本文内容为vim快速入门——vimtutor. 二 第一讲2.1 移动光标(命令模式下)上 - k下 - j左 - h右 - l 2.2 进入和退出vim进入vim - v ...

  9. [Luogu P3295][SCOI 2016]萌萌哒

    先说下暴力做法,如果[l1,r1]和[l2,r2]子串相等等价于两个区间内每个数对应相等.那么可以用并查集暴力维护,把对应相等的数的位置维护到同一个集合里去,最后答案其实就是把每个集合可以放的数个数乘 ...

  10. [再寄小读者之数学篇](2014-06-22 函数恒为零的一个充分条件 [中国科学技术大学2011年高等数学B考研试题])

    设 $f(x)$ 在 $\bbR$ 上连续, 又 $$\bex \phi(x)=f(x)\int_0^x f(t)\rd t \eex$$ 单调递减. 证明: $f\equiv 0$. 证明: 设 $ ...