- 浏览: 142373 次
- 性别:
- 来自: 北京
文章分类
最新评论
-
Audi_kenel:
还是不理解
aop -
hanmiao:
楼主这代码的排版真够乱的,完全没法看。
freemarker 国际化 -
cafecheng:
cafecheng 写道<@spring.message ...
freemarker list map 应用 spring.message -
cafecheng:
<@spring.messageArgs "t ...
freemarker list map 应用 spring.message -
领悟人生:
太感动了,我的项目大的提升。从1700多次的请求,减至200多 ...
终结IE6下背景图片闪烁问题
最近做一个活动,需要上传logo并压缩图片到适合的尺寸,但是这次由于给予使用率不高,所以想把图片压缩存到数据库里面,然后再前台通过流将图片转换回来
主要使用了java的
<dependency>
<groupId>im4java</groupId>
<artifactId>im4java</artifactId>
<version>1.1.0</version>
</dependency>
1、前台从controller过来
@RequestMapping(method = RequestMethod.POST,value="/logo")
public String uploadCompanyLogo(ModelMap model,@PathVariable Integer companyId,HttpServletRequest request) {
MultipartHttpServletRequest multipartRequest = (MultipartHttpServletRequest) request;
MultipartFile logo = multipartRequest.getFile("logo");
MultipartFile portrait = multipartRequest.getFile("portrait");
this.putCompanyInfo(model,companyId);
try {
if(logo!=null && !logo.isEmpty()){
byte[] big = imageOperationService.resiizeImage(ImageSizeEnum.LOGOBIGWIDTH.getValue(), ImageSizeEnum.LOGOBIGHEIGHT.getValue(), logo.getInputStream());
byte[] small = imageOperationService.resiizeImage(ImageSizeEnum.LOGOSMALLWIDTH.getValue(), ImageSizeEnum.LOGOSMALLHEIGHT.getValue(), logo.getInputStream());
companyService.saveLogo(big, companyId);
companyService.saveLogoSmall(small, companyId);
}
if(portrait!=null && !portrait.isEmpty()){
byte[] data = imageOperationService.resiizeImage(ImageSizeEnum.PORTRAITHEIGHT.getValue(), ImageSizeEnum.PORTRAITHEIGHT.getValue(), portrait.getInputStream());
companyService.updatePortrait(data, companyId);
}
} catch (IOException e) {
// FIXME Auto-generated catch block
e.printStackTrace();
} catch (InterruptedException e) {
// FIXME Auto-generated catch block
e.printStackTrace();
}
return "company/manage/logo";
}
2,主要是我们service方法的实现了
@Override
public byte[] resiizeImage(int height, int width,InputStream Stream) throws IOException, InterruptedException {
// FIXME Auto-generated method stub
IMOperation op = new IMOperation();
op.addImage("-");
op.resize(height, width);
op.addImage("-");
Pipe pipeIn = new Pipe(Stream,null);
ByteArrayOutputStream fos = new ByteArrayOutputStream();
Pipe pipeOut = new Pipe(null,fos);
// set up command
ConvertCmd convert = new ConvertCmd();
convert.setInputProvider(pipeIn);
convert.setOutputConsumer(pipeOut);
try {
convert.run(op);
} catch (IM4JavaException e) {
// FIXME Auto-generated catch block
e.printStackTrace();
}
Stream.close();
return fos.toByteArray();
}
这样我们就把这个图片的字节流放到了数据库中
3、再来,我们就来显示这张图片
public class ImageShowUtil {
@Value(value = "#{globalProperties['company.business.big']}")
private String biglogurl;
@Value(value = "#{globalProperties['company.business.small']}")
private String smalllogurl;
@Value(value = "#{globalProperties['company.business.logo']}")
private String logourl;
private static final Logger logger = LoggerFactory.getLogger(ImageShowUtil.class);
/**
* 显示byte流图片
* @param data
* @param res
* @throws IOException
*/
@Cacheable(cacheName = "icoCache")
public void showByteImage(byte data[],HttpServletResponse res,String type) throws IOException {
try {
res.setContentType("image/*"); // 设置返回的文件类型
OutputStream toClient = res.getOutputStream(); // 得到向客户端输出二进制数据的对象
if(data!=null&&data.length>0){
toClient.write(data); // 输出数据
}else{
if("big".equals(type)){
URL url = new URL(biglogurl);
InputStream bis = new BufferedInputStream(url.openStream());
toClient.write(getBytes(bis)); // 输出数据
bis.close();
}else if("small".equals(type)){
URL url = new URL(smalllogurl);
InputStream bis = new BufferedInputStream(url.openStream());
toClient.write(getBytes(bis)); // 输出数据
bis.close();
}else{
URL url = new URL(logourl);
InputStream bis = new BufferedInputStream(url.openStream());
toClient.write(getBytes(bis)); // 输出数据
bis.close();
}
toClient.close();
}
} catch (IOException e) // 错误处理
{
logger.error("---------->error:"+e.getMessage());
// PrintWriter toClient = res.getWriter(); // 得到向客户端输出文本的对象
// res.setContentType("text/html;charset=UTF-8");
// toClient.write("无法打开图片!");
// toClient.close();
}
}
public byte[] getBytes(InputStream is) throws IOException {
ByteArrayOutputStream baos = new ByteArrayOutputStream();
byte[] b = new byte[2048];
int len = 0;
while ((len = is.read(b, 0, 2048)) != -1) {
baos.write(b, 0, len);
}
baos.flush();
byte[] bytes = baos.toByteArray();
return bytes;
}
}
这样我们页面的图片的src只想这个servlet就行了,图片就显示出来了
,这样不好就是,如果图片过多的话,每个图片相当于一个http请求,增加系统的负载
发表评论
-
深入分析 Java 中的中文编码问题
2012-02-21 12:23 0http://www.ibm.com/developerwor ... -
邮件 带附件
2011-12-14 11:34 817BodyPart messageBodyPart = new ... -
maven release plugin
2011-09-05 17:58 1119<!-- fixing Git branch rele ... -
jvm 配置
2011-08-29 15:51 8811. 堆大小设置 JV ... -
正则表达是
2011-06-30 17:23 733推荐:正则表达式口诀及教程 正则 其实也势 ... -
关于Comparator 按指定的顺序 排序
2011-05-30 18:15 2014package com.weina.utils; impor ... -
java 序列化对象 反序列化对象
2011-01-06 15:13 511/** Read the object from Ba ... -
java 得到日期
2010-09-06 11:33 889package com.tianji.job2.web.del ... -
concurent
2010-06-24 17:29 995编写多线程的程序一直都是一件比较麻烦的事情,要考虑很多事情,处 ... -
aop
2010-06-23 20:09 1847AOP 它可以解决OOP和过程化方法不能够很好解决的横切 ... -
用freemarker 写分页组件
2010-05-19 11:33 1222public class PageTemplage{ //f ... -
java 注入 map和list
2009-12-16 14:13 1330<!-- Construct List --> ... -
UML
2009-11-17 11:43 814在类图中,类与类之间的关系主要有一下几种: ... -
List map set
2009-11-11 10:00 15011、下面为去掉ids中重复的元素,但是list的o ... -
java 文件操作
2009-10-26 10:23 757例子主要是写了一个,给定目录结构,查找字符串的一段代码! -
java io
2009-10-26 10:20 1114今天看maven项目的时候看了几个列子 1、主要是我一直对i ... -
部署报错
2009-10-19 20:21 815这次我们做了一个项目是遇到的问题: 1、我们需要上传一个照片 ... -
Java meta 设置
2009-03-26 10:39 1722Java代码 1. <% ... -
线程的原子性
2009-03-13 17:27 10281,关于线程安全,如果一个方法里面全部是局部变量,那么是没有必 ... -
国际化后乱码
2009-03-12 11:56 1210由于我们的想使用的是maven编译,所以在国际化的时候,我们需 ...
相关推荐
Java实现字节流与图片的转化
Java字节流 .pdf 学习资料 复习资料 教学资源
Java字节流与字符流的介绍.pdf
Java学习
java 字节与字符流,字符流转换
JAVA利用poi完成word转pdf,内容包括两个现成工具类和使用到的所有jar包,易用简单,word转pdf在实际项目中有很多使用,工具类中已经包括了字节流,以及变参的替换
1.base64格式转图片并保存; 2.png字节的图片转jpg字节的图片(流的形式) 3.亲测可以使用,不提供jar,自己下载jar
title: Java字节字符转换流Java字节字符转换流转换流的用法//字节流InputStream in = System.in;//写入文件中//换行//
主要介绍了java字节字符转换流操作,结合实例形式详细分析了Java字符流转换相关原理、实现方法及操作注意事项,需要的朋友可以参考下
处理对象不同:字节流能处理所有类型的数据(如图片、avi等),而字符流只能处理字符类型的数据。 结论:只要是处理纯文本数据,就优先考虑使用字符流。 除此之外都使用字节流。 输入流和输出流 对输入流只能进行...
这是一个实时采集话筒PCM音频流并转换成MP3格式文件的代码,标准音频流转换,支持高码率和低码率。
让你轻松搞定word到二进制流的转换,你值得拥有的技术,总会用到的,看见了就收藏一下吧
OReilly.Java.I.O.2nd.Edition.May.2006 Java的io包主要包括: 1. 两种流:字节流(byte Stream)和字符流(character stream),这...3. 一个桥梁:将字节流转变为字符流的InputStreamReader和OutputStreamWriter。
java调用海康威视的摄像头,进行rtsp流转rtmp流,里面提供了demo,可以在项目中正式使用,也可以调整里面相关的参数。
主要为大家详细介绍了Java解码H264格式视频流中的图片,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
本篇文章主要介绍了Java字节流与基本数据类型的转换实例,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
按照操作单元划分,可以划分为字节流和字符流; 按照流的角色划分为节点流和处理流。 按照操作方式分类: 按照操作对象分类: IO 流基础对象: InputStream/Reader: 所有的输入流的基类,前者是字节输入流,后者是...
下面小编就为大家带来一篇java编程中字节流转换成字符流的实现方法。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
android平台jpeg数据流转换成rgb直接显示的so库 使用方式: byte[] jpegRaw = V4L2Camera.decode(dataBuf, ret); rgb2Buffer(jpegRaw, WIDTH, HEIGHT, rgbBuffer); ByteBuffer jpegBuffer = ByteBuffer.wrap(rgb...
自己实现的Huffman编码,压缩率接近50%,使用字节流写入文件。解码时读取字节流,将字节流转化为二进制串,匹配字符解压。使用I have a dream作为测试文件。