java 上传图片 生成缩略图_上传图片同时生成缩略图
packagecn.conris.sys.utils;import java.io.*;import java.awt.*;import java.awt.image.*;importjava.awt.Graphics;importjava.awt.color.ColorSpace;importjavax.imageio.ImageIO;public classChangeImageSize {/** */
/*** 缩放图像
*
*@paramsrcImageFile
* 源图像文件地址
*@paramresult
* 缩放后的图像地址
*@paramscale
* 缩放比例
*@paramflag
* 缩放选择:true 放大; false 缩小;*/
public static void scale(String srcImageFile, String result, booleanflag) {try{
BufferedImage src= ImageIO.read(new File(srcImageFile)); //读入文件
int width = src.getWidth(); //得到源图宽
int height = src.getHeight(); //得到源图长
double scale = 1;if (width >height) {
scale= height / 64;
}else{
scale= width / 64;
}if(flag) {//放大
width = (int) (width *scale);
height= (int) (height *scale);
}else{//缩小
width = (int) (width /scale);
height= (int) (height /scale);
}
Image image=src.getScaledInstance(width, height,
Image.SCALE_DEFAULT);
BufferedImage tag= newBufferedImage(width, height,
BufferedImage.TYPE_INT_RGB);
Graphics g=tag.getGraphics();
g.drawImage(image,0, 0, null); //绘制缩小后的图
g.dispose();
ImageIO.write(tag,"JPEG", new File(result));//输出到文件流
BufferedImage src2 = ImageIO.read(new File(result)); //读入文件
int x = 0;int y = 0;if (src2.getWidth() >src2.getHeight()) {
x= (src2.getWidth() - 64) / 2; //得到源图宽
y = 0; //得到源图长
} else{
y= (src2.getHeight() - 64) / 2; //得到源图宽
x = 0; //得到源图长
}
convert(result, result);
OperateImage opimg= new OperateImage(result, result, x, y, 64, 64);
opimg.cut();
}catch(IOException e) {
e.printStackTrace();
}
}/** */
/*** 图像切割
*
*@paramsrcImageFile
* 源图像地址
*@paramdescDir
* 切片目标文件夹
*@paramdestWidth
* 目标切片宽度
*@paramdestHeight
* 目标切片高度*/
public static void cut(String srcImageFile, String descDir, intdestWidth,intdestHeight) {try{
Image img;
ImageFilter cropFilter;//读取源图像
BufferedImage bi = ImageIO.read(newFile(srcImageFile));int srcWidth = bi.getHeight(); //源图宽度
int srcHeight = bi.getWidth(); //源图高度
if (srcWidth > destWidth && srcHeight >destHeight) {
Image image=bi.getScaledInstance(srcWidth, srcHeight,
Image.SCALE_DEFAULT);
destWidth= 200; //切片宽度
destHeight = 150; //切片高度
int cols = 0; //切片横向数量
int rows = 0; //切片纵向数量//计算切片的横向和纵向数量
if (srcWidth % destWidth == 0) {
cols= srcWidth /destWidth;
}else{
cols= (int) Math.floor(srcWidth / destWidth) + 1;
}if (srcHeight % destHeight == 0) {
rows= srcHeight /destHeight;
}else{
rows= (int) Math.floor(srcHeight / destHeight) + 1;
}//循环建立切片//改进的想法:是否可用多线程加快切割速度
for (int i = 0; i < rows; i++) {for (int j = 0; j < cols; j++) {//四个参数分别为图像起点坐标和宽高//即: CropImageFilter(int x,int y,int width,int height)
cropFilter = new CropImageFilter(j * 200, i * 150,
destWidth, destHeight);
img=Toolkit.getDefaultToolkit().createImage(newFilteredImageSource(image.getSource(),
cropFilter));
BufferedImage tag= newBufferedImage(destWidth,
destHeight, BufferedImage.TYPE_INT_RGB);
Graphics g=tag.getGraphics();
g.drawImage(img,0, 0, null); //绘制缩小后的图
g.dispose();//输出为文件
ImageIO.write(tag, "JPEG", newFile(descDir+ "pre_map_" + i + "_" + j + ".jpg"));
}
}
}
}catch(Exception e) {
e.printStackTrace();
}
}/** */
/*** 图像类型转换 GIF->JPG GIF->PNG PNG->JPG PNG->GIF(X)*/
public static voidconvert(String source, String result) {try{
File f= newFile(source);
f.canRead();
f.canWrite();
BufferedImage src=ImageIO.read(f);
ImageIO.write(src,"JPG", newFile(result));
}catch(Exception e) {//TODO Auto-generated catch block
e.printStackTrace();
}
}/** */
/*** 彩色转为黑白
*
*@paramsource
*@paramresult*/
public static voidgray(String source, String result) {try{
BufferedImage src= ImageIO.read(newFile(source));
ColorSpace cs=ColorSpace.getInstance(ColorSpace.CS_GRAY);
ColorConvertOp op= new ColorConvertOp(cs, null);
src= op.filter(src, null);
ImageIO.write(src,"JPEG", newFile(result));
}catch(IOException e) {
e.printStackTrace();
}
}/** */
/***@paramargs*/
public static voidmain(String[] args) {
scale("d://2.jpg", "d://3.jpg", false);
}
}
java 上传图片 生成缩略图_上传图片同时生成缩略图相关推荐
- java 上传图片 生成缩略图_将图片生成缩略图Java代码实现
在工作中经常会遇到图片处理相关的需求,比如说一些图片网站只展示相关的缩略图,而真实的图片可能很大而不是直接展示.所以就需要在上传相关的图片后直接对图片进行处理生成相关的缩略图.实现代码如下: impo ...
- java 唯一id生成算法_唯一ID生成算法剖析
在业务开发中,大量场景需要唯一ID来进行标识:用户需要唯一身份标识:商品需要唯一标识:消息需要唯一标识:事件需要唯一标识-等等,都需要全局唯一ID,尤其是分布式场景下. 唯一ID有哪些特性或者说要求呢 ...
- 对抗生成网络_深度卷积生成对抗网络
本教程演示了如何使用深度卷积生成对抗网络(DCGAN)生成手写数字图片.该代码是使用 Keras Sequential API 与 tf.GradientTape 训练循环编写的. 什么是生成对抗网络 ...
- java 生成随机数_不会生成随机数?我们来看看java生成随机数的10种方法
1.引言 本文将探讨用 Java 生成随机数的不同方法. 2.Java API Java API 提供了几种随机数生成方法.让我们一起来了解一下. 2.1.java.lang.Math Math 类中 ...
- java keytool 导出证书_使用keytool 生成证书
keytool 工具介绍 keytool 是java 用于管理密钥和证书的工具,其功能包括: 1 创建并管理密钥 2 创建并管理证书 3 作为CA 为证书授权 4 导入导出证书 keytool 采用k ...
- java动画迷宫寻路_[人工智能] 迷宫生成、寻路及可视化动画
前言 数据结构准备 迷宫生成算法 迷宫寻路算法 前言 本次带来迷宫相关的算法,迷宫的算法涉及到不少经典的图论算法,在游戏中NPC这些算法被大量的运用,深入了解和学习这些算法是为开发游戏打下坚实的基础. ...
- java mysql 主键生成策略_主键生成策略
1.Assigned(常用) Assigned方式由程序生成主键值,并且要在save()之前指定,否则会抛出异常. 特点:逐渐的生成值完全由用户决定,于底层数据库无关.用户需要维护主键值,在调用ses ...
- java keytool生成证书_用keytool生成证书
1.证书查看与删除 查看是否已创建过同名的证书 keytool -list -v -alias ssotest -keystore "%JAVA_HOME%/JRE/LIB/SECURITY ...
- java上传图片http错误_上传图片出错
源码: package action; import java.io.IOException; import com.qiniu.common.QiniuException; import com.q ...
最新文章
- 21 个HTML网页转RSS Feeds的工具
- 成功部署SD-WAN策略应注意的几个事项—Vecloud微云
- 基于空间数据库的空间数据管理
- 外包女程序员-----励志段子 留着 等没事的时候看看
- spring cloud 微服务调用--ribbon和feign调用
- wxpython下载缓慢_我可以在wxPython的wx.grid.Grid中加速优化GridCellAttr的使用吗?
- 课后作业-结队编程项目进度-贪吃蛇
- 承博士:让云计算落地生根的中国云计算平台
- python 当日日期_Python程序寻找当日赢家
- Python的PyDBG调试器的用法
- 互联网产品总监的经验总结:从0-1为你讲明白BI与数据可视化
- python抓取教学_Python Selenium 实战教学:爬取每日天气
- c语言转意字符 s,第2章 C语言初探:12、C语言转义字符
- 苹果CMS影视双端APP源码
- STM32硬核DIY机械键盘|蓝牙USB双模|灯控
- python利用函数求不及格率_Excel利用这个函数轻松完成自动计算及格率、合格率...
- 摩尔定律已经走到尽头?
- Python-Excel报表自动化生成报表(二)
- 毛刺现象 java_记一次微服务耗时毛刺排查
- 联想ThinkPad装window10系统
热门文章
- 美团(iOS客户端)面经
- 【现成工具】java获取国家法定节假日包含指定月份节假日和周末
- python getch_python – 是否可以使用getch()来获取不同长度的输入?
- Java:三大特性之继承性
- 社区发现算法——(Spectral Clustering)谱聚类算法
- [电路笔记]非线性电路
- dis的前缀单词有哪些_前缀dis-(dif-,di-) = apart;to undo;lack of,to remove;not
- Android基于Facebook Rebound的动画效果框架Backboard demo (非常炫酷)
- unity之动画编辑器
- 金田新材冲刺上交所:拟募资15.6亿 方文彬家族控制62%股权