java 上传的图片大小为0_JAVA技术:上传图片的缩放处理

news/2024/7/7 20:16:21

图片上传到后,会根据情况将图片缩小成一个图标,我们可以利用java强大的图形处理功能,对上传的图片进行缩放处理。

下面的程序使用jdk1.4中最新的ImageIO对图片进行读写。使用AffineTransform对图片进行缩放。

import java.io.File;

import java.awt.image.BufferedImage;

import java.awt.Image;

import java.awt.image.AffineTransformOp;

import javax.imageio.ImageIO;

import java.awt.geom.AffineTransform;

public class UploadImg{

/**

* @param fromdir 图片的原始目录

* @param todir 处理后的图片存放目录

* @param imgfile 原始图片

* @param sysimgfile 处理后的图片文件名前缀

*

*/

……

public boolean CreateThumbnail() throws Exception

{

//ext是图片的格式 gif JPG 或png

String ext="";

double Ratio=0.0;

File F = new File(fromdir,imgfile);

if (!F.isFile())

throw new Exception(F+" is not image file error in CreateThumbnail!");

//首先判断上传的图片是gif还是JPG ImageIO只能将gif转换为png

if (isJpg(imgfile)){

ext="jpg";

}else{

ext="png";

}

File ThF = new File(todir,sysimgfile+"."+ext);

BufferedImage Bi = ImageIO.read(F);

//假设图片宽 高 最大为120 120

Image Itemp = Bi.getScaledInstance (120,120,Bi.SCALE_SMOOTH);

if ((Bi.getHeight()>120) || (Bi.getWidth()>120)){

if (Bi.getHeight()>Bi.getWidth())

Ratio = 120.0/Bi.getHeight();

else

Ratio = 120.0/Bi.getWidth();

}

AffineTransformOp op = new AffineTransformOp(AffineTransform.getScaleInstance(Ratio, Ratio), null);

Itemp = op.filter(Bi, null);

try {

ImageIO.write((BufferedImage)Itemp, ext, ThF);

}catch (Exception ex) {

throw new Exception(" ImageIo.write error in CreatThum.: "+ex.getMessage());

}

return (true);

}

}

该程序使用了 的AWT,在下运行可能报错,有两种解决方式:

(1) jdk1.4以前版本:需要安装 XFree86和XFree86-Xvfb ,加入 export DISPLAY=hostdomain:0.0

(2) jdk 1.4以后版本,在执行命令java 加入参数-Djava.awt.headless=true,表示这是一个没有键盘 没有显示器的无头,意称机房托管的服务器。

【责编:John】

--------------------next---------------------


http://lihuaxi.xjx100.cn/news/241345.html

相关文章

1084 Broken Keyboard

两个注意的点 1.本题被归到散列专题下,但是由于是逐字符地映射到整形,可以直接把布尔型哈希数组的大小设置为ASCII的数量128,然后直接将字符作为数组下标(如果是字符串,才需要自己写一个哈希函数,将字符串映射到整形&…

浮动元素会引起的问题和你的解决办法

问题: (1)父元素的高度无法被撑开,影响与父元素同级的元素(2)与浮动元素同级的非浮动元素会跟随其后(3)若非第一个元素浮动,则该元素之前的元素也需要浮动,否…

DBA入门之路:由浅入深的总结学习法

有很多DBA朋友在入门时总觉得不得路径,长久的徘徊于门外,而过来人的经验又往往高屋建瓴难以落地,两者总觉得难以对接起来,如何才能解决这个问题呢? 我一直推荐的学习方法,之前在文章 DBA入门之路&#xff1…

java 判断是否为邮箱_Java判断邮箱是否存在 有返回值

public static boolean checkEmail(String email) {if (!email.matches("[\\w\\.\\-]([\\w\\-]\\.)[\\w\\-]")) {return false;}String log "";String host "";String hostName email.split("")[1];// 去掉后面的System.out.printl…

1033 旧键盘打字

1. 非常奇怪,明明都说了用下划线替代空格,但是用scanf读入的时候就会有1个测试点没通过,换成cin.getline就通过了 2.3种情况下对应的哈希表赋值为true。1是上来就赋值,2是对于大写字母把对应小写字母也赋值,这里注意直…

前端编程提高之旅(五)----写给大家看的css书

自实习也有几个月的时间了,以爱奇艺实习为敲门砖。进入了眼下这家公司。假设说当初能进爱奇艺是暂时袭击DIVCSS的话,眼下在这家公司体验到。不论什么技术都必须悉知原理,这样才干做到庖丁解牛。做一个内行的人。css属性和使用方法都摆在那里&…

flex数据绑定

2019独角兽企业重金招聘Python工程师标准>>> 1 、方法绑定 [Bindable(event"myFlagChanged")] private function isEnabled():String { if (myFlag)return true; else return ‘false; } <mx:TextArea id"myTA" text"{isEnabled()}&…

java 接口工程_Java工程师(15)抽象类与接口

抽象类思考下面程序潜在的问题交通工具中定义了4个方法&#xff0c;其中行驶方法内部会依次调用启动、加速、停止方法。由于不同的交通工具&#xff0c;启动的方式差异很大&#xff0c;所以交通工具类中并不实现该方法&#xff0c;而是将其交给子类实现。上述代码的问题&#x…