之前是先补白后压缩,再一次改进后按比例压缩后补白生成图片。
import java.io.*;
import java.util.logging.Level;
import java.util.logging.Logger;
import java.awt.*;
import com.sun.image.codec.jpeg.*;
import java.awt.image.BufferedImage;
/**
*
* @author Administrator
*/
public class Img_Middle {
public void img_change(String url,String name)
{
Tosmallerpic(url,new File(url+name),"_middle",name,188,165,(float)0.7);
Tosmallerpic(url,new File(url+name),"_small",name,45,45,(float)0.7);
Tosmallerpic(url,new File(url+name),"_smaller",name,116,100,(float)0.7);
Tosmallerpic(url,new File(url+name),"_view",name,530,440,(float)0.7);
}
/**
*
* @param f 图片所在的文件夹路径
* @param filelist 图片路径
* @param ext 扩展名
* @param n 图片名
* @param w 目标宽
* @param h 目标高
* @param per 百分比
*/
private static void Tosmallerpic(String f,File filelist,String ext,String n,int w,int h,float per){
Image src;
try {
src = javax.imageio.ImageIO.read(filelist); //构造Image对象
String img_midname=f+n.substring(0,n.indexOf("."))+ext+n.substring(n.indexOf("."));
int old_w=src.getWidth(null); //得到源图宽
int old_h=src.getHeight(null);
int new_w=0;
int new_h=0; //得到源图长
double w2=(old_w*1.00)/(w*1.00);
double h2=(old_h*1.00)/(h*1.00);
if(w2<=1||h2<=1){//源图比目标图小的时候
if(w2<=1){
if(h2<=1){
new_w=old_w;
new_h=old_h;
}else{
new_w=(int)Math.round(old_w/h2);
new_h=(int)Math.round(old_h/h2);
}
}else{
if(h2<=1){
if(w2<=1){
new_w=old_w;
new_h=old_h;
}else{
new_w=(int)Math.round(old_w/w2);
new_h=(int)Math.round(old_h/w2);
}
}
}
}
else//源图比目标图大的时候
{
if(w2>=h2)
{
new_w=(int)Math.round(old_w/w2);
new_h=(int)Math.round(old_h/w2);
}else
{
new_w=(int)Math.round(old_w/h2);
new_h=(int)Math.round(old_h/h2);
}
}
BufferedImage tag = new BufferedImage(w,h,BufferedImage.TYPE_INT_RGB);
//tag.getGraphics().drawImage(src,0,0,new_w,new_h,null); //绘制缩小后的图
tag.getGraphics().setColor(Color.white);
tag.getGraphics().fillRect(0,0,w,h);
if(new_w==w&&new_h==h){
tag.getGraphics().drawImage(src.getScaledInstance(new_w, new_h, Image.SCALE_SMOOTH), 0,0,null);
}else{
if(new_w==w){
tag.getGraphics().drawImage(src.getScaledInstance(new_w, new_h, Image.SCALE_SMOOTH), 0, Math.abs(h - new_h) / 2,null);
}else{
if(new_h==h){
tag.getGraphics().drawImage(src.getScaledInstance(new_w, new_h, Image.SCALE_SMOOTH), Math.abs(w-new_w)/2,0,null);
}
else{
tag.getGraphics().drawImage(src.getScaledInstance(new_w, new_h, Image.SCALE_SMOOTH), Math.abs(w-new_w)/2,Math.abs(h-new_h)/2,null);
}
}
}
//tag.getGraphics().drawImage(src.getScaledInstance(new_w, new_h, Image.SCALE_SMOOTH), 0,0,null);
FileOutputStream newimage=new FileOutputStream(img_midname); //输出到文件流
JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(newimage);
JPEGEncodeParam jep=JPEGCodec.getDefaultJPEGEncodeParam(tag);
/* 压缩质量 */
jep.setQuality(per, true);
encoder.encode(tag, jep);
//encoder.encode(tag); //近JPEG编码
newimage.close();
} catch (IOException ex) {
Logger.getLogger(Img_Middle.class.getName()).log(Level.SEVERE, null, ex);
}
}
/*public static void main(String args[]){
//String n="0e5465fc-025a-458d-8383-e9ced0c1e728.jpg";
String f="F:\\200903300012\\pics\\201006\\";
File file=new File(f);
if(file.exists())
{
File[] filelist=file.listFiles();
for(int i=0;i<filelist.length;i++)
{
String n=filelist[i].getName();
Tosmallerpic(f,filelist[i],"_middle",n,185,160,(float)0.7);
Tosmallerpic(f,filelist[i],"_small",n,45,45,(float)0.7);
Tosmallerpic(f,filelist[i],"_smaller",n,116,100,(float)0.7);
Tosmallerpic(f,filelist[i],"_view",n,530,440,(float)0.7);
}
}
}*/
}
分享到:
相关推荐
煤矿井下图像型早期火灾探测研究王媛彬,马宪民(西安科技大学电控学院,陕西西安?710054)摘要:针对煤矿井下传统火灾探测方法的不足,提出了一种基于图像型的火灾探测方法,阐述了对所获取的红外图像进行预处理、特征提取...
主要介绍了Java图片处理 (文字水印、图片水印、缩放、补白)代码实例,本文直接给出实现代码,需要的朋友可以参考下
巧用补白艺术促进深度学习——小学英语语篇教学中补白教学策略的运用探究.pdf
因为项目中考虑到添加图片版权的保护,特意看了下水印的处理...以下有两种方式:第一种是添加文字水印;第二种是添加图片水印和文字水印两种方法,水印图片可以是GIF,PNG透明的文件,我一般采用的是PNG的,因为它的...
边框的里面可以有一层边内... 边内补白分为上边内补白(top),下边内补白(bottom),左边内补白(left),右边内补白(right). 边内补白只有width一种属性. 相关教程:CSS教程:margin属性定义边外补白 padding -- 定义边内补
mode 4 : 只缩放,不裁剪,保留全部图片信息,此时的参数只是限制了生成的图片的最大宽高,不产生补白。 mode 5 : 生成的图比例严格按照需要的比例,宽和高不超过给定的参数。 服务器环境要求 PHP 5.2 ...
成语故事,因“补白”而精彩
成语故事,因“补白”而精彩.rar
让学生在"补白"中深度学习.pdf
边框的外面可以有一层边外补白(margin),边外补白可以把块级元素分开.边外补白定义了围绕某种元素(elements)的空白. 可以查看盒模式,了解边外补白和边内补白. 边外补白分为上边外补白(top),下边外补白(bottom),左边外...
支持对各种图片的预处理(支持图片的合并,拼接,格式转换,加补白,去除背景色等操作)。 支持批量图片生成PDF,可把图片追加到PDF, 对图片的合并,可以支持拼版操作, 所有功能,封装在20K的dll中,可以嵌入你的...
XML应用开发(软件品牌)-1期 4.9 课堂实践-使用CSS容器属性显示XML文档-边距属性margin和补白属性padding.doc 学习资料 复习资料 教学资源
XML应用开发(软件品牌)-1期 4.9 案例分析-使用CSS容器属性显示XML文档-边距属性margin和补白属性padding.doc 学习资料 复习资料 教学资源
解决缩略图按比例缩放并自动补白问题 修改后台添加新闻出现错误继续执行的BUG luocms v2.0.101201 更新信息: 1.增加后台超级管理员无法删除,避免操作失误造成后台系统无法登录。 2.替换原有默认模板,...
为研究微波和常规加热时煤储层内温度场的演化规律及储层瓦斯解吸量的变化规律,采用理论分析和数值模拟的试验方法,构建了以岩石SEM图像为几何特征,瓦斯和煤基质块体为传热介质的共轭传热模型,对比了常规加热和微波...
本文实例讲述了PHP全功能无变形图片裁剪操作类与用法。分享给大家供大家参考,具体如下:...不裁剪,只缩放,不足的不补白,产生的图片为实际有效像素大小,例如有个图片是600X600 现在要生成 120X100 那么缩放后的实际
针对单一低透煤层瓦斯抽采浓度低、衰减快、瓦斯抽采困难等问题,提出了水力压裂增透技术.研究了水力压裂钻孔壁煤体起裂所需最小注水压力,分析了水力压裂过程中注水压力、流量等参数随注水时间动态变化特点,并对压裂...
上补白 右补白 下补白 左补白 补白 上边框宽度 右边框宽度 下边框宽度 左边框宽度 边框宽度 边框颜色 边框风格 上边框 右边框 下边框 左边框 边框 宽度 高度 漂浮 清除 分类属性 显示 空白 ...