java以目标尺寸按原图片像素比缩放切割图片

java 图片处理 切图代码 java 图片处理 切图代码 实现自动缩放图片 立即下载

1

需求:原始图片缩放为目标尺寸后,要求缩放后的图片保持原图片的样式不改变,但是缩放后图片的四边可以裁减。
2原理:将待裁剪图片宽高相除值和目标尺寸宽高相除值进行比较,如果前者较大,说明待裁剪图片相对于目标尺寸来说要宽出一块,现在已高为基准进行裁剪,即将原始图片的高度缩放到目标尺寸的高度。计算出原始图片高度和目标尺寸高度的比例,和原始图片宽度相乘,得到缩放后的宽度。此时的缩缩放后的高度就是目标尺寸的高度,但是宽度*肯定*会比目标尺寸宽度宽。将缩放后的多余的宽度分为两份右边和左边各裁去一份。
3以宽为基准原理类似。



/**
	 *
	 * @param srcImgPath 待切割图片路径
	 * @param destImgPath 切割后图片路径
	 * @param destImgW 所需宽度
	 * @param destImgH 所需高度
	 */
	public static void createThumb (String srcImgPath , String destImgPath, int destImgW , int destImgH){
	    //原图片等比例缩小或放大之后的图片
	    int narrowImgW ;
	    int narrowImgH ;
	    //原图片大小
	    int srcImgW ;
	    int srcImgH ;
	    try {
	        BufferedImage bi = ImageIO. read(new File(srcImgPath));
	        srcImgW = bi.getWidth();
	        srcImgH = bi.getHeight();
	        // 转换图片尺寸与目标尺寸比较 , 如果转换图片较小,说明转换图片相对于目标图片来说高较小,需要以高为基准进行缩放。
	        if((float )srcImgW /srcImgH > (float)destImgW / destImgH){
	            narrowImgW = ( int)(((float )destImgH / (float)srcImgH)*srcImgW);
	            narrowImgH = destImgH;
	            //按照原图以高为基准等比例缩放、或放大。这一步高为所需图片的高度,宽度肯定会比目标宽度宽。
	            int cutNarrowImgSize = (narrowImgW - destImgW)/2;
	            BufferedImage narrowImg = new BufferedImage(narrowImgW, narrowImgH,BufferedImage.TYPE_INT_RGB);
	            narrowImg.getGraphics().drawImage(bi.getScaledInstance(narrowImgW, narrowImgH, Image.SCALE_SMOOTH ), 0, 0, null);
	            //等比例缩放完成后宽度与目标尺寸宽度相比较 , 将多余宽的部分分为两份 ,左边删除一部分
	            Image image = narrowImg.getScaledInstance(narrowImgW, narrowImgH, Image.SCALE_DEFAULT );
	            CropImageFilter cropFilter = new CropImageFilter(cutNarrowImgSize, 0, narrowImgW-cutNarrowImgSize, narrowImgH);
	            Image img = Toolkit.getDefaultToolkit().createImage( new FilteredImageSource(image.getSource(), cropFilter));
	            BufferedImage cutLiftNarrowImg = new BufferedImage( narrowImgW-cutNarrowImgSize, narrowImgH,BufferedImage.TYPE_INT_RGB );
	            cutLiftNarrowImg.getGraphics().drawImage(img, 0, 0, null);
	            //右边删除一部分
	            image = cutLiftNarrowImg.getScaledInstance(narrowImgW-cutNarrowImgSize, narrowImgH, Image.SCALE_DEFAULT );
	            cropFilter = new CropImageFilter(0, 0, narrowImgW-cutNarrowImgSize*2, narrowImgH);
	            img = Toolkit.getDefaultToolkit().createImage( new FilteredImageSource(image.getSource(), cropFilter));
	            BufferedImage cutRightNarrowImg = new BufferedImage( narrowImgW-cutNarrowImgSize*2, narrowImgH,BufferedImage.TYPE_INT_RGB );
	            Graphics g = cutRightNarrowImg.getGraphics();
	            g.drawImage(img, 0, 0, null); // 绘制截取后的图
	            g.dispose();
	            //输出为文件 最终为所需要的格式
	            ImageIO. write(cutRightNarrowImg, "JPEG", new File(destImgPath));
	        }
	        else{ //以宽度为基准
	            narrowImgW = destImgW;
	            narrowImgH = ( int) (((float )destImgW / (float)srcImgW)*srcImgH);
	            int cutNarrowImgSize = (narrowImgH - destImgH)/2;
	 
	            BufferedImage narrowImg = new BufferedImage(narrowImgW, narrowImgH,BufferedImage.TYPE_INT_RGB);
	            narrowImg.getGraphics().drawImage(bi.getScaledInstance(narrowImgW, narrowImgH, Image.SCALE_SMOOTH ), 0, 0, null);
	 
	            Image image = narrowImg.getScaledInstance(narrowImgW, narrowImgH, Image.SCALE_DEFAULT );
	            CropImageFilter cropFilter = new CropImageFilter(0, cutNarrowImgSize, narrowImgW, narrowImgH-cutNarrowImgSize);
	            Image img = Toolkit.getDefaultToolkit().createImage( new FilteredImageSource(image.getSource(), cropFilter));
	            BufferedImage cutTopNarrowImg = new BufferedImage( narrowImgW, narrowImgH-cutNarrowImgSize,BufferedImage. TYPE_INT_RGB);
	            cutTopNarrowImg.getGraphics().drawImage(img, 0, 0, null);
	 
	            image = cutTopNarrowImg.getScaledInstance(narrowImgW, narrowImgH-cutNarrowImgSize, Image. SCALE_DEFAULT);
	            cropFilter = new CropImageFilter(0, 0, narrowImgW, narrowImgH-cutNarrowImgSize*2);
	            img = Toolkit.getDefaultToolkit().createImage( new FilteredImageSource(image.getSource(), cropFilter));
	            BufferedImage cutBottomNarrowImg = new BufferedImage( narrowImgW, narrowImgH-cutNarrowImgSize*2,BufferedImage. TYPE_INT_RGB);
	            Graphics g = cutBottomNarrowImg.getGraphics();
	            g.drawImage(img, 0, 0, null);
	            g.dispose();
	            ImageIO. write(cutBottomNarrowImg, "JPEG", new File(destImgPath));
	        }
	    } catch (IOException e) {
	        e.printStackTrace();
	    }
	}
public static void main(String []args){
	    createThumb("G://3.png", "G://223.jpg", 320, 212);
}

原图片1:1,并且长宽都比目标尺寸要小。

原图

缩放后:

在此输入图片描述

以高为基准缩放:原图

原图

缩略图

缩略图

已款以基准:原图

原图

缩略图:

缩略图



原文地址: 九路车没站牌


AI 代码赋能短视频带货:服装及多赛道批量内容生产全流程实操 本文聚焦 AI 技术在短视频带货领域的落地应用,以服装赛道为核心,延伸至花卉绿植、图书、茶具等热门领域,系统拆解 AI 工具在选品、素材处理、视频制作(含动态效果、场景搭建)、运营优化等环节的实操方法。针对从业者普遍面临的 “内容生产低效”“无专业技术难出优质视频”“流量运营踩坑” 等痛点,提供从基础工具使用到高阶视频制作的全流程技术方案,助力相关从业者借助 AI 实现批量、高效的短视频内容产出。 阅读详情

相关推荐

射频总集篇:(不断更新)

射频每一章涉及到的重点理论/设计方法 CHAPTER 1 传输线理论 输入阻抗Zin,负载阻抗ZL,驻波比ρ,反射系数 CHAPTER 2 波导 矩形波导,圆波导,同轴线 CHAPTER 3 微型带状传输线 微带线的参数设计,带状线的参数设计 CHAPTER 4 ...

jieyannn的博客 1921

Java图片按比例裁剪,按指定像素裁剪

java图片处理

费马程序猿的博客 955

英特尔® NUC迷你电脑实现无人值守自动开机配置指南

本文详细介绍了如何配置英特尔® NUC迷你电脑实现无人值守自动开机功能。从BIOS设置到操作系统级配置,涵盖硬件兼容性确认、电源恢复功能设置及常见问题解决,帮助用户轻松实现设备断电后自动恢复运行,适用于家庭服务器、企业终端等多种场景。

weixin_42638178的博客 474

使用java对图像进行切分的程序及注意事项

使用java对图像进行切分的程序及注意事项

SadOnMyOwn的博客 2439

ROS与UR10e机械臂实战:从零搭建到精准控制

本文详细介绍了如何从零开始搭建ROS与UR10e机械臂的开发环境,包括硬件准备、软件配置、网络设置以及MoveIt!运动控制实战。通过具体的代码示例和常见问题排查,帮助开发者快速掌握UR10e机械臂的精准控制技术,适用于工业自动化和实验室研究场景。

m3n5b7v8c9x的博客 772

2篇5章1节:实验流行病学的核心特征和设计原则

本文系统阐释实验流行病学的核心定义、四大核心特征、四大基本原则及主流设计类型,结合骨科、肿瘤科、儿科、精神科、内外妇儿及公共卫生等多学科临床实践案例,具象化解读人为干预、随机分组、平行对照、前瞻性设计的核心内涵与应用价值。同时,规范梳理对照、随机、盲法、重复四大研究基本原则,详细介绍临床试验、现场试验、社区试验三类主流研究设计的适配场景与应用差异。

MD Code 176

java 像素值_(java)图片像素的操作

因为做个游戏,需要一些图片资源,而获取到的图片资源都是jpg格式的,不是透明的,例如下面样式的:为了取出其中的蓝光部分,透明化黑色背景,我开始了图片处理探索之路。这篇文章的内容包含以下部分:1.RGB是什么?2.获取图片指定位置的RGB值3.图片的灰化处理4.修改图片的透明通道alpha————————————————————————————————————————————————————————...

weixin_42498163的博客 1965

linux系统宝塔服务器temp文件夹里总是被上传病毒php脚本

服务器时不时的会发送短信说你服务器有病毒,找到了这个tmp文件,删除了之后又有了。确实是有很多人就这么无聊,每天都攻击你的服务器。找了很久的原因,网上也提供了一大堆方法,但都是很简陋的答案,具体怎么操作并没有说。没办法只能自己去排查这个问题。从两个角度来考虑,第一是服务器系统问题,比如宝塔的漏洞。但一时半会看不出问题来。只能去排查自己的项目代码。最后了解到代码确实是存在漏洞的。但代码中也确实了很多的校验,为什么会存在漏洞了?这就不得不从上传的过程开始说起。

guiplan 1497

Java中获取图片文件分辨率

有时候我们需要根据截图的尺寸来判断设备的分辨率,下面有两种获取图片文件分辨率的方法

等风来的博客 5136

实战封神!YOLOv7 轻量化部署全攻略:ONNX格式转换+TensorRT极致加速(速度直接提升3-5倍,精度无损)

部署核心链路,这是YOLO系列部署的最优解,速度提升3~5倍,精度无损;ONNX是桥梁:解决模型兼容性问题,简化后能去掉冗余节点,是TensorRT加速的前提;TensorRT是核心:NVIDIA显卡的极致加速引擎,FP16量化是速度与精度的最优平衡,无需手动配置,一键开启;轻量化终极组合YOLOv7-tiny + 416尺寸 + TensorRT FP16,速度提升5~8倍,满足所有实时检测场景;避坑核心:转换参数必加,推理尺寸必须一致,engine文件显卡专属。

专注于Python爬虫开发,分享爬虫技巧、项目实战与反爬经验,使用Scrapy、BeautifulSoup等工具,解决数据抓取难题。 308

【应用】OpenClaw玩转有道云笔记

功能名称核心原理实操示例(直接复制可用)实操避坑+补充说明网页剪藏插件自动抓取网页正文、下载图片,通过 API 发送到你的有道云笔记,内联图片避免防盗链失效帮我把这个网页剪藏到云笔记:https://example.com/article1. 避坑:知乎、公众号等需登录的网站,先在浏览器登录再剪藏;2. 原理:自动过滤广告,只留正文;3. Twitter/X 剪藏需额外配置 APIFY_API_TOKEN(见1.2.4)创建笔记。

海兰 716

java 图片按像素分割_java以目标尺寸按原图片像素比缩放切割图片

1需求:原始图片缩放为目标尺寸后,要求缩放后的图片保持原图片的样式不改变,但是缩放后图片的四边可以裁减。2原理:将待裁剪图片宽高相除值和目标尺寸宽高相除值进行比较,如果前者较大,说明待裁剪图片相对于目标尺寸来说要宽出一块,现在已高为基准进行裁剪,即将原始图片的高度缩放到目标尺寸的高度。计算出原始图片高度和目标尺寸高度的比例,和原始图片宽度相乘,得到缩放后的宽度。此时的缩缩放后的高度就是目标尺寸的高...

weixin_33877700的博客 465

计算机视觉安防监控升级:人脸识别与行为异常检测

计算机视觉安防监控升级:人脸识别与行为异常检测 ,人工智能,计算机视觉,大模型,AI,本文将深入探讨人脸识别与行为异常检测技术在安防监控中的应用,包括技术原理、算法实现、应用场景以及面临的挑战与解决方案。通过实际案例和代码示例,帮助读者更好地理解和掌握这些技术,为推动安防监控系统的智能化升级提供参考。

不踩坑,不知道坑有多深;不总结,踩过的坑白踩。 23万+

Java 实现图片裁剪(附代码) | Java工具类

本文提供将视频按照自定义尺寸进行裁剪的Java工具类,一如既往的实用主义。

阿良的博客 8619

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

java 切图 按比例切图

java 切图   public boolean scaleImageFromUrl(String oldpath, String newpath, int wdith, int height) { try { URL url = null; url = new URL(oldpath); URLConnection connection; con...

我的成长之路 546

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

Java使用BufferedImage裁剪图片

Java裁剪图片

gaojie12的博客 4883

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

java 裁剪图片 参数 宽 高 自动按照比例来剪切

package com.dakele.activity.common.utils; import java.awt.Image; import java.awt.image.BufferedImage; import java.io.File; import java.io.IOException; import java.util.UUID; import javax.imageio.ImageI

censhenping的专栏 3116

java 求一组数据的各自所占百分比

【代码】java 求一组数据的各自所占百分比。

WoAiShuiGeGe的博客 3550

Java中图片处理工具类,含等比缩放、图片裁剪

java图片文件处理工具类【包括图片缩放,剪切等功能】 [java] view plaincopy package com.taocz.youngth.util;      import java.awt.Graphics;   import java.awt.GraphicsConfiguration;   import java.aw

逍遥飞鹤的专栏 4291

JAVA 等比例截取图片

package com.utils.img; import java.awt.Rectangle; import java.awt.image.BufferedImage; import java.io.*; import java.nio.channels.FileChannel; import java.util.Iterator; import javax.imageio.ImageIO;...

cocoaxian的博客 1077

Java 获取显示器的尺寸,缩放比例,分辨率

显示器自己有个物理尺寸,windows可以通过如下的方式设置缩放比例,还可以设置显示器分辨率;

来啊 快活啊 2990

JavaFX 中的像素、分辨率与缩放比

JavaFX 中的像素、分辨率与缩放比总结与补充   JavaFX 中,一般需要对每个组件设置一个尺寸值,这个值实际上就是像素值(pixel,px)。像素值是什么呢?在 Windows 上,一般使用任何截图软件进行截图选定区域后,在左上角就会显示该区域的长(width)和宽(height),这个长和宽的单位就是像素。   不过要注意的问题是,像素有相对值与绝对值之分。这个问题有点复杂,这里详细解释一下。 绝对像素,指的是像素的最终实际值,也就是上面所说的截图软件中显示的值。关于这个值,在 Windows

暗诺星刻的博客 3909

Java 操作按照尺寸裁剪图片

import java.awt.Image; import java.awt.Rectangle; import java.awt.geom.AffineTransform; import java.awt.image.AffineTransformOp; import java.awt.image.BufferedImage; import java.io.File; import java.i

小嘞嘞的专栏 3715
上一篇: Cocos2dx Cannot find module with tag 'CocosDenshion/android' in import path
mr_same
博客等级 码龄17年 8粉丝 12原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值