Java上传图片,对图片进行等比例缩放,及局部裁剪的工具类代码
发布时间:2020-05-24 22:06:51 所属栏目:Java 来源:互联网
导读:Java上传图片,对图片进行等比例缩放,及局部裁剪的工具类代码
|
下面是脚本之家 jb51.cc 通过网络收集整理的代码片段。 脚本之家小编现在分享给大家,也给大家做个参考。 import java.awt.Container;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Image;
import java.awt.MediaTracker;
import java.awt.Rectangle;
import java.awt.RenderingHints;
import java.awt.Toolkit;
import java.awt.image.BufferedImage;
import java.awt.image.CropImageFilter;
import java.awt.image.FilteredImageSource;
import java.awt.image.ImageFilter;
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.UUID;
import javax.imageio.ImageIO;
import com.sun.image.codec.jpeg.JPEGCodec;
import com.sun.image.codec.jpeg.JPEGEncodeParam;
import com.sun.image.codec.jpeg.JPEGImageEncoder;
public class FileUploadUtils {
/**
* 裁剪图片
* @param input
* @param basepath
* @param uid
* @param x
* @param y
* @param width
* @param height
* @return 绝对路径
* @throws IOException
*/
public static String cutImg(String input,String basepath,int x,int y,int width,int height) throws IOException{
String path2 = basepath+"/"+ConstantUtils.USERFACETEMPPATH;
String postfix = getPostfix(input);
String dst = path2 +"/"+UUID.randomUUID().toString()+"."+postfix;
createDir(path2);
imgCut(basepath+input,dst,postfix,x,y,width,height);
return dst;
}
/**
* 裁剪图片
* @param input
* @param src
* @param x
* @param y
* @param width
* @param height
* @throws IOException
*/
public static void imgCut(String input,String dst,String type,int height) throws IOException
{
BufferedImage fromimg = ImageIO.read(new File(input));
ImageFilter cropFilter = new CropImageFilter(x,height);
Image img = Toolkit.getDefaultToolkit().createImage(new FilteredImageSource(fromimg.getSource(),cropFilter));
BufferedImage tag = new BufferedImage(width,height,BufferedImage.TYPE_INT_RGB);
Graphics g = tag.getGraphics();
g.drawImage(img,null); // 绘制小图
g.dispose();
// 输出为文件
// dir = "d:tempcut_image_" + i + "_" + j + ".jpg";
File f = new File(dst);
ImageIO.write(tag,type,f);
}
/**
* 上传头像文件
* @param src
* @param basepath
* @param filename
* @return
* @throws Exception
*/
public static String uploadImg(File src,String filename) throws Exception{
String daypath = DateTools.getYear() + "" + DateTools.getMonth() + "" + DateTools.getMonthWeek();
String temppath = ConstantUtils.BASEUPLOADPATH+"/"+ConstantUtils.ORIGINALIMGPATH+"/" + daypath;
String thumbnailpath = ConstantUtils.BASEUPLOADPATH+"/"+ConstantUtils.THUMBNAILIMGPATH+"/" + daypath;
String postfix = getPostfix(filename);
String uuid = UUID.randomUUID().toString();
String dsttempname = uuid+"."+postfix;
createDir(basepath +"/"+temppath);
createDir (basepath +"/"+ thumbnailpath);
String dstallpath = basepath +"/"+temppath+"/"+dsttempname;
String dstthumbnailpath = basepath +"/"+thumbnailpath+"/"+dsttempname;
copy(src,new File(dstallpath));
//对上传的文件进行 等比例 裁剪。 按照前段要展现的 height width
Thumbnail(dstallpath,dstthumbnailpath,350,300,100);
//返回裁剪后的路径
return thumbnailpath+"/"+dsttempname;
}
/**
* 上传文件
* @param src
* @param dst
* @throws Exception
*/
public static void copy(File src,File dst) throws Exception {
try {
InputStream in = null;
OutputStream out = null;
try {
in = new BufferedInputStream(new FileInputStream(src),ConstantUtils.BUFFER_SIZE);
out = new BufferedOutputStream(new FileOutputStream(dst),ConstantUtils.BUFFER_SIZE);
byte[] buffer = new byte[ConstantUtils.BUFFER_SIZE];
while (in.read(buffer) > 0) {
out.write(buffer);
}
} finally {
if (null != in) {
in.close();
}
if (null != out) {
out.close();
}
}
} catch (Exception e) {
e.printStackTrace();
throw e;
}
}
/**
* 得到文件后缀 jpg
* @param fileName
* @return
*/
public static String getPostfix(String fileName){
if (fileName.equals(""))
return "";
int pos = fileName.lastIndexOf(".");
if (pos < 0) {
return fileName.substring(fileName.length() - 3).toLowerCase();
} else {
return fileName.substring(pos+1).toLowerCase();
}
}
/**
* 创建目录
* @param filePath
*/
public static void createDir(String filePath) {
File myFile = new File(filePath);
if (!myFile.exists()) {
if (!myFile.mkdirs())
System.out.println("创建目录 fail");
else
System.out.println("创建目录 success");
}
myFile = null;
}
/**
* 等比例缩放图片
* @param infile
* @param outfile
* @param width
* @param height
* @param quality
* @throws IOException
* @throws InterruptedException
*/
public static void Thumbnail(String infile,String outfile,int height,int quality) throws IOException,InterruptedException {
// save thumbnail image to OUTFILE
//System.out.println("infile:" + infile);
BufferedImage thumbImage = null;
BufferedOutputStream out = null;
Image image = null;
image = Toolkit.getDefaultToolkit().createImage(infile);
MediaTracker mediaTracker = new MediaTracker(new Container());
mediaTracker.addImage(image,0);
mediaTracker.waitForID(0);
int thumbWidth = width;
int thumbHeight = height;
double thumbRatio = (double) thumbWidth / (double) thumbHeight;
int imageWidth = image.getWidth(null);
int imageHeight = image.getHeight(null);
double imageRatio = (double) imageWidth / (double) imageHeight;
if (thumbRatio < imageRatio) {
thumbHeight = (int) (thumbWidth / imageRatio);
} else {
thumbWidth = (int) (thumbHeight * imageRatio);
}
thumbImage = new BufferedImage(thumbWidth,thumbHeight,BufferedImage.TYPE_INT_RGB);
Graphics2D graphics2D = thumbImage.createGraphics();
graphics2D.setRenderingHint(RenderingHints.KEY_INTERPOLATION,RenderingHints.VALUE_INTERPOLATION_BILINEAR);
graphics2D.drawImage(image,thumbWidth,null);
out = new BufferedOutputStream(new FileOutputStream(outfile));
JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(out);
JPEGEncodeParam param = encoder.getDefaultJPEGEncodeParam(thumbImage);
quality = Math.max(0,Math.min(quality,100));
param.setQuality((float) quality / 100.0f,false);
encoder.setJPEGEncodeParam(param);
encoder.encode(thumbImage);
out.close();
thumbImage = null;
out = null;
image = null;
}
}
以上是脚本之家(jb51.cc)为你收集整理的全部代码内容,希望文章能够帮你解决所遇到的程序开发问题。 如果觉得脚本之家网站内容还不错,欢迎将脚本之家网站推荐给程序员好友。 (编辑:安卓应用网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
