扫二维码与项目经理沟通
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流
上传的图片都是要转的,因为上传者不一定都有那么大的图片,这里有个压缩大小的例子
创新互联建站主营掇刀网站建设的网络公司,主营网站建设方案,重庆APP开发公司,掇刀h5微信小程序定制开发搭建,掇刀网站营销推广欢迎掇刀等地区企业咨询
调用的时候
PictureTool pic = new PictureTool();
//file:图片源文件
//saveSmallFile:图片转换后存储file
//其他参数是转换的宽,高,以及格式
pic.WriteSmallImage(file, saveSmallFile, 400, 270,"jpeg");
如果要想前端页面限制上传图片大小的话,用框架(struts,springmvc)里面都可以配置,用js脚本也可以限制,不过如果客户端禁用了js脚本的话这个限制还是等同于没有,网上的例子很多的,最好是能转一下大小。
!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"
HTML
HEAD
TITLE New Document /TITLE
META NAME="Generator" CONTENT="EditPlus"
META NAME="Author" CONTENT=""
META NAME="Keywords" CONTENT=""
META NAME="Description" CONTENT=""
/HEAD
script
var maxH = 768;
var maxW = 1024;
function DrawImage(ImgD){
var preW = 300;
var preH = 400 ;
var image=new Image();
image.src=ImgD.src;
if(image.width maxW || image.height maxH){
alert("图片尺寸过大,请选择" + maxW + "*" + maxH + "的图片!");
return;
}
if(image.width0 image.height0){
flag=true;
if(image.width/image.height= preW/preH){
if(image.widthpreW){
ImgD.width=preW;
ImgD.height=(image.height*preW)/image.width;
}else{
ImgD.width=image.width;
ImgD.height=image.height;
}
ImgD.alt=image.width+"×"+image.height;
}
else{
if(image.heightpreH){
ImgD.height=preH;
ImgD.width=(image.width*preH)/image.height;
}else{
ImgD.width=image.width;
ImgD.height=image.height;
}
ImgD.alt=image.width+"×"+image.height;
}
}
}
function checkFormat(filePath) {
var i = filePath.lastIndexOf('.');
var len = filePath.length;
var str = filePath.substring(len,i+1);
var extName = "JPG,GIF,PNG,JPEG,BMP";
if(extName.indexOf(str.toUpperCase()) 0) {
alert("请选择正确的图片文件!");
return false;
}
return true;
}
function FileChange(Value){
if(checkFormat(Value)){
flag=false;
document.getElementById("uploadimage").width=10;
document.getElementById("uploadimage").height=10;
document.getElementById("uploadimage").alt="";
document.getElementById("uploadimage").src=Value;
}
}
/script
BODY
input type="file" size="30" name="picaddress" onChange="javascript:FileChange(this.value);"
brIMG id=uploadimage height=0 width=0 src="" onload="javascript:DrawImage(this);"
/BODY
/HTML
截取点代码片断,你自己看着改
修改图片大小用getScaledInstance方法
BufferedImage bimg = null;
Image img = null;
int width, height;
try {
bimg = ImageIO.read(u);
if(bimg.getWidth() bimg.getHeight())
{
width = 40;
height = bimg.getHeight() * width / bimg.getWidth();
}
else
{
height = 40;
width = bimg.getWidth() * height / bimg.getHeight();
}
img = bimg.getScaledInstance(width, height, Image.SCALE_DEFAULT);
pre_image = bimg.getScaledInstance(width * 10, height * 10, Image.SCALE_DEFAULT);
} catch (IOException e) {
e.printStackTrace();
}
可以使用Draw这个类,通过改变像素来改变存储大小,实例如下:
public static boolean compressPic(String srcFilePath, String descFilePath) throws IOException {
File file = null;
BufferedImage src = null;
FileOutputStream out = null;
ImageWriter imgWrier;
ImageWriteParam imgWriteParams;
// 指定写图片的方式为 jpg
imgWrier = ImageIO.getImageWritersByFormatName("jpg").next();
imgWriteParams = new javax.imageio.plugins.jpeg.JPEGImageWriteParam(
null);
// 要使用压缩,必须指定压缩方式为MODE_EXPLICIT
imgWriteParams.setCompressionMode(imgWriteParams.MODE_EXPLICIT);
// 这里指定压缩的程度,参数qality是取值0~1范围内,
imgWriteParams.setCompressionQuality((float) 1);
imgWriteParams.setProgressiveMode(imgWriteParams.MODE_DISABLED);
ColorModel colorModel =ImageIO.read(new File(srcFilePath)).getColorModel();// ColorModel.getRGBdefault();
// 指定压缩时使用的色彩模式
// imgWriteParams.setDestinationType(new javax.imageio.ImageTypeSpecifier(
// colorModel, colorModel.createCompatibleSampleModel(16, 16)));
imgWriteParams.setDestinationType(new javax.imageio.ImageTypeSpecifier(
colorModel, colorModel.createCompatibleSampleModel(16, 16)));
try {
if (isBlank(srcFilePath)) {
return false;
} else {
file = new File(srcFilePath);System.out.println(file.length());
src = ImageIO.read(file);
out = new FileOutputStream(descFilePath);
imgWrier.reset();
// 必须先指定 out值,才能调用write方法, ImageOutputStream可以通过任何
// OutputStream构造
imgWrier.setOutput(ImageIO.createImageOutputStream(out));
// 调用write方法,就可以向输入流写图片
imgWrier.write(null, new IIOImage(src, null, null),
imgWriteParams);
out.flush();
out.close();
}
} catch (Exception e) {
e.printStackTrace();
return false;
}
return true;
}
public static boolean isBlank(String string) {
if (string == null || string.length() == 0 || string.trim().equals("")) {
return true;
}
return false;
}
看你想按图片的实际大小、还是按当前组件(ballgame)的大小。
按实际大小
g.drawImage(sun, sun.getWidth(), sun.getHeight(),null);
组件大小
g.drawImage(sun, getWidth(), getHeight(),null);
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流