在工作中经常会遇到图片处理相关的需求,比如说一些图片网站只展示相关的缩略图,而真实的图片可能很大而不是直接展示。所以就需要在上传相关的图片后直接对图片进行处理生成相关的缩略图。实现代码如下:

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;

public class ImageUtil {

private static String DEFAULT_PREVFIX = "thumb_";

private static Boolean DEFAULT_FORCE = false;//建议该值为false

/**

*

Title: thumbnailImage

*

Description: 根据图片路径生成缩略图

* @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){

System.out.println("Sorry, the image suffix is illegal. the standard image suffix is {}." + types);

return ;

}

System.out.println("target image's size, width:{"+w+"}, height:{"+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)));

System.out.println("change image's height, width:{"+w+"}, height:{"+h+"}.");

}

} else {

if(height > h){

w = Integer.parseInt(new java.text.DecimalFormat("0").format(width * h/(height*1.0)));

System.out.println("change image's width, width:{"+w+"}, height:{"+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()));

System.out.println("缩略图在原路径下生成成功");

} catch (IOException e) {

System.out.println("generate thumbnail image failed."+e);

}

}else{

System.out.println("the image is not exist.");

}

}

/**

* 测试生成图片缩略图

* @param args

*/

public static void main(String[] args) {

new ImageUtil().thumbnailImage("C:/Users/Pictures/aaa.jpg", 50, 75,DEFAULT_PREVFIX,DEFAULT_FORCE);

}

}

java 上传图片 生成缩略图_将图片生成缩略图Java代码实现相关推荐

  1. java runtime 清屏_【图片】请问java编写中如何做到清屏啊。。。_java吧_百度贴吧...

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 /** 系统登陆.要求使用初始化参数的方式输入用户名和密码.在程序运行之前先判断输入的参数个数是否合法.如果不合法, 则提醒用户的程序执行不,并退出程序. ...

  2. java上传图片限制大小_求高手解决用java限制上传图片大小!!

    本人的网站程序,可以由作者选择自己的照片上传,但只能限制图片类型为gif或jpg,可以防止上传木马,但苦恼的是不能限制图片大小,所以有的作者 几上传几M的图片,浪费了很多空间,能否在下面这个代码中家限 ...

  3. java captcha 验证码_验证码图片生成工具类——Captcha.java

    验证码图片生成工具,使用JAVA生成的图片验证码,调用getRandcode方法获取图片验证码,以流的方式传输到前端页面. import java.awt.Color; import java.awt ...

  4. java生成图片url_Java Springboot如何基于图片生成下载链接

    现有一些图片在服务器上的链接,在浏览器中打开这些链接是直接显示在浏览器页面的形式. 现在需要生成这些图片的单独下载以及打包下载链接,即在浏览器中打开下载链接后弹出下载框提示下载.由于前端存在跨域问题, ...

  5. 简单的错觉画_错觉图片生成实验 - 正方形错觉

    (图书介绍:童晶:<C和C++游戏趣味编程>新书预告) 这学期的线下C语言课程,大一同学们学完旋转蛇案例后(童晶:第4章 旋转蛇(<C和C++游戏趣味编程>配套教学视频)),布 ...

  6. java 唯一id生成算法_唯一ID生成算法剖析

    在业务开发中,大量场景需要唯一ID来进行标识:用户需要唯一身份标识:商品需要唯一标识:消息需要唯一标识:事件需要唯一标识-等等,都需要全局唯一ID,尤其是分布式场景下. 唯一ID有哪些特性或者说要求呢 ...

  7. 对抗生成网络_深度卷积生成对抗网络

    本教程演示了如何使用深度卷积生成对抗网络(DCGAN)生成手写数字图片.该代码是使用 Keras Sequential API 与 tf.GradientTape 训练循环编写的. 什么是生成对抗网络 ...

  8. java上传图片http错误_上传图片出错

    源码: package action; import java.io.IOException; import com.qiniu.common.QiniuException; import com.q ...

  9. java底层原理书籍_阿里面试题:Java中this和super关键字的底层实现原理

    知道的越多,不知道的就越多,业余的像一棵小草! 编辑:业余草 来源:https://www.xttblog.com/?p=5028 B 站:业余草 最近一个粉丝加我说,接到了阿里的面试,问问我阿里会面 ...

最新文章

  1. Ext智能提示 - Spket(Eclipse插件)
  2. elasticSearch6源码分析(6)http和transport模块
  3. 朴素贝叶斯原理及实现
  4. 【.NET Core项目实战-统一认证平台】第八章 授权篇-IdentityServer4源码分析
  5. 台式计算机听音乐,配置一台4000元的台式电脑,主要用于日常办公及上网查资料,听音乐,看电影及学习....
  6. [POJ2888] Magic Bracelet
  7. 【渝粤题库】广东开放大学 英语语法与基础写作 形成性考核 (2)
  8. 【语言处理与Python】2.5WordNet
  9. Python 生成器 和 yield 关键字
  10. 使用Entity Developer构建ASP.NET Core Web API应用程序
  11. 数据结构实验 6.宗教信仰
  12. 我的WCF4 Rest Service及Entity Framework with POCO之旅(三)——用Entity Framework和POCO Template实现数据模型及存储...
  13. 20200615每日一句
  14. 【资源下载】netassist 下载 资源下载
  15. 汇编语言程序设计实验(六)——子程序设计
  16. 郑州调频广播频率表 转载
  17. a标签href属性的用法
  18. AI:大力出奇迹?Bigger is better?AI下一代浪潮?—人工智能的大语言模型(LLMs)/预训练大模型的简介、发展以及未来趋势
  19. 免费logo设计在线生成
  20. linux中.sh文件是什么?怎么执行?

热门文章

  1. java计算机毕业设计ssm医疗垃圾管理系统f5aj8(附源码、数据库)
  2. java base64 svg转png_svg转成png并下载
  3. vue中百度地图的图形绘制
  4. 阿帕奇 php 的整合配置,apache+php环境整合
  5. 闹元宵,迎开学!内官社区元宵节亲子活动甜甜出炉!
  6. 超宽带无线电:汽车传统钥匙演化手机智能钥匙的关键技术
  7. thinkphp5.0提示不支持redis详细解决办法
  8. 扬帆优配|联通港股创近两年新高!A股资源类股爆发,食品饮料领跌
  9. Pycharm设置命令行/控制台自动换行
  10. 成长中必须知道的10个故事 也是做人,做营销必须知道的故事: