* 上传图片
* @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位网友表示赞同!