* 上传图片
* @param base64图像编码字符串
* @return上传成功后的文件名
*/
公共静态字符串上传(字符串base64){
String dir=getRequest().getRealPath(UPLOAD_PATH);
文件fileLocation=new File(dir);
字符串文件类型=base64.substring(11, 14);
if(!fileLocation.exists()) {
boolean isCreated=fileLocation.mkdir();
if(!isCreated) {
//创建目标上传目录失败,可以做其他处理,比如抛出自定义异常等,一般情况下不应该出现这种情况。
返回空值;
}
}
if(base64.indexOf("jpeg") !=-1) {
//当jpeg文件存在时
base64=base64.replaceFirst("jpeg", "jpg");
}
String tempStr=UUID.randomUUID().toString()+System.currentTimeMillis();
String upName=tempStr+"."+文件类型;
文件输出流输出;
字符串iconBase64=base64.substring(22);
尝试{
byte[] buffer=new BASE64Decoder().decodeBuffer(iconBase64);
out=new FileOutputStream(dir+"/"+upName);
输出.write(缓冲区);
关闭();
String upNameXhdpi=tempStr+"-xhdpi."+fileType;
String upNameMhdpi=tempStr+"-mhdpi."+fileType;
FileOutputStream outXhdpi=new FileOutputStream(dir+"/"+upNameXhdpi);
FileOutputStream outMhdpi=new FileOutputStream(dir+"/"+upNameMhdpi);
resizeImage(iconBase64, outXhdpi, xhdpi, fileType);
resizeImage(iconBase64, outMhdpi, mhdpi, fileType);
返回PATH+UPLOAD_PATH + "/" +upName;
} catch (FileNotFoundException e) {
//TODO 自动生成的catch 块
e.printStackTrace();
返回空值;
} catch (IOException e) {
//TODO 自动生成的catch 块
e.printStackTrace();
返回空值;
}
}
/**
* 改变图片的尺寸,直到宽度为size,然后高度与宽度成比例变化。
* @param为上传图片的输入流
* @param os 改变图像大小后,将图像流输出到目标OutputStream
* @param size 新图像的宽度
* @param format 新图片的格式
* @抛出IOException
*/
public static void resizeImage(String is, OutputStream os, int size, String format) throws IOException {
ByteArrayInputStream in=new ByteArrayInputStream(new BASE64Decoder().decodeBuffer(is));
BufferedImage prevImage=ImageIO.read(in);
双宽度=prevImage.getWidth();
双倍高度=prevImage.getHeight();
双百分比=尺寸/宽度;
int newWidth=(int)(宽度* 百分比);
int newHeight=(int)(高度* 百分比);
BufferedImage 图像=new BufferedImage(newWidth, newHeight, BufferedImage.TYPE_INT_BGR);
图形图形=image.createGraphics();
Graphics.drawImage(prevImage, 0, 0, newWidth, newHeight, null);
ImageIO.write(图像、格式、操作系统);
os.flush();
附寄();
os.close();
好了,文章到此结束,希望可以帮助到大家。
【Java中通过Base64编码保存图片及生成不同分辨率副本的方法】相关文章:
1.蛤蟆讨媳妇【哈尼族民间故事】
2.米颠拜石
3.王羲之临池学书
4.清代敢于创新的“浓墨宰相”——刘墉
5.“巧取豪夺”的由来--米芾逸事
6.荒唐洁癖 惜砚如身(米芾逸事)
7.拜石为兄--米芾逸事
8.郑板桥轶事十则
9.王献之被公主抢亲后的悲惨人生
10.史上真实张三丰:在棺材中竟神奇复活
用户评论
现在想把图片放在网页里又不需要占用太多空间,Base64这种方法还真不错,尤其这个题目的做法可以根据屏幕大小显示不同的图,更节省资源了!
有15位网友表示赞同!
学到新东西啦!原来可以用 Base64 来保存图片,而且还能生成不同分辨率的副本,这样上传和展示都会方便很多。
有16位网友表示赞同!
这么做能让图片加载速度更快吧?因为每次只需要根据需要加载对应分辨率的图片文件。
有16位网友表示赞同!
感觉这个方法挺实用的,在移动端开发中尤其合适,可以保证画面流畅度同时控制网页大小。
有10位网友表示赞同!
Java里处理 Base64 的库有哪些?有没有推荐的比较常用的?
有19位网友表示赞同!
不同分辨率的图片该怎么生成呢?是用图像处理库的吗?
有10位网友表示赞同!
把图片保存成 Base64 后,后续操作方便吗?比如修改?
有7位网友表示赞同!
这个方法会不会影响图片质量?不同的分辨率下会有像素损失吗?
有5位网友表示赞同!
这篇文章介绍的比较全面了,清晰易懂!
有8位网友表示赞同!
以后遇到这种情况就可以参考这个方法来解决啦。很实用!
有8位网友表示赞同!
这种方法在实际项目中也能用到吗?有没有案例演示?
有20位网友表示赞同!
感觉学习一下 Java 中 Base64 的使用方法很有必要,很多地方都能用到。
有10位网友表示赞同!
之前想过用 Base64 保存图片减少流量,现在终于知道怎么在 Java 中实现啦!
有13位网友表示赞同!
这个方法比把图片直接上传好?有啥优缺点呢?
有13位网友表示赞同!
这篇文章给了我很好的启发,以后尝试一下这种方法。
有5位网友表示赞同!
原来还有这么多方法可以处理图片的尺寸大小,真是太牛了!
有7位网友表示赞同!
学习 Java 的时候一定要跟着实践去,这个题目的代码很有参考价值。
有13位网友表示赞同!
感谢分享这篇文章,让我了解了许多知识。
有20位网友表示赞同!
希望以后能看到更多关于图片处理的博客文章,学习一下这些实用技能。
有18位网友表示赞同!