- 浏览: 144897 次
- 性别:
- 来自: 北京
文章分类
最新评论
-
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 834BodyPart messageBodyPart = new ... -
maven release plugin
2011-09-05 17:58 1171<!-- fixing Git branch rele ... -
jvm 配置
2011-08-29 15:51 9391. 堆大小设置 JV ... -
正则表达是
2011-06-30 17:23 764推荐:正则表达式口诀及教程 正则 其实也势 ... -
关于Comparator 按指定的顺序 排序
2011-05-30 18:15 2054package com.weina.utils; impor ... -
java 序列化对象 反序列化对象
2011-01-06 15:13 535/** Read the object from Ba ... -
java 得到日期
2010-09-06 11:33 918package com.tianji.job2.web.del ... -
concurent
2010-06-24 17:29 1040编写多线程的程序一直都是一件比较麻烦的事情,要考虑很多事情,处 ... -
aop
2010-06-23 20:09 1880AOP 它可以解决OOP和过程化方法不能够很好解决的横切 ... -
用freemarker 写分页组件
2010-05-19 11:33 1254public class PageTemplage{ //f ... -
java 注入 map和list
2009-12-16 14:13 1365<!-- Construct List --> ... -
UML
2009-11-17 11:43 844在类图中,类与类之间的关系主要有一下几种: ... -
List map set
2009-11-11 10:00 15291、下面为去掉ids中重复的元素,但是list的o ... -
java 文件操作
2009-10-26 10:23 789例子主要是写了一个,给定目录结构,查找字符串的一段代码! -
java io
2009-10-26 10:20 1147今天看maven项目的时候看了几个列子 1、主要是我一直对i ... -
部署报错
2009-10-19 20:21 846这次我们做了一个项目是遇到的问题: 1、我们需要上传一个照片 ... -
Java meta 设置
2009-03-26 10:39 1743Java代码 1. <% ... -
线程的原子性
2009-03-13 17:27 10571,关于线程安全,如果一个方法里面全部是局部变量,那么是没有必 ... -
国际化后乱码
2009-03-12 11:56 1242由于我们的想使用的是maven编译,所以在国际化的时候,我们需 ...
相关推荐
在Java编程中,字节流(Byte Stream)是处理数据的基本方式,特别是在处理二进制数据,如图片、音频或视频文件时。本教程将详细讲解如何使用Java实现字节流来转换和处理图片。 首先,我们需要理解字节流的概念。在...
在Java编程中,字节流(Byte Stream)是处理数据的基本方式,特别是在处理二进制数据,如图片、音频或视频文件时。本教程将详细讲解如何使用Java实现字节流与图片之间的转换,这对于在网络上传输或者存储图片等二...
Java字节流 Java字节流是一种用于处理字节数据的流处理机制,在Java中,字节流不包含边界数据的连续流,字节流是由字节组成的,Java里字符由两个字节组成。字节流是最基本的,它是按字节来处理二进制数据。 字节流...
字节流适用于处理所有类型的数据,包括文本、图片、音频、视频等,因为它们可以处理任何二进制数据。 #### 常见的字节流类: - **FileInputStream** 和 **FileOutputStream**:用于从文件中读取和向文件中写入字节...
字节流主要用于处理任何类型的原始数据,如图片、音频文件或者二进制文件,而字符流则专注于处理基于文本的数据。本文将深入探讨这两类流的原理、用途以及它们之间的关联。 首先,我们来看字节流。字节流由...
Java 字节流与字符流的介绍 Java 中的流操作可以分为两种:字节流和字符流。字节流是指以 byte 为单位进行读写操作的流,而字符流是指以 char 为单位进行读写操作的流。 字节流的介绍 字节流的所有读操作都继承自...
1. **图片转字节流** 在Java或.NET等编程语言中,我们可以使用相关的类库来读取图片文件并将其转换为字节流。例如,在Java中,可以使用`java.io.FileInputStream`和`java.nio`包中的`ByteBuffer`来读取图片文件,并...
字节流处理的是二进制数据,适用于任何类型的文件,包括文本文件和非文本文件(如图片、音频、视频等)。字符流则用于处理字符数据,主要针对文本文件。 在学习Java基础时,掌握字节流和字符流是必不可少的。字节流...
在Java编程中,字节流(Byte Stream)是处理数据的一种基本方式,它适用于任何类型的数据,包括文本、图片、音频等。字节流主要分为输入流和输出流,其中InputStream类是所有字节输入流的基类,而OutputStream类则是...
在Java中,IO流分为两大类:字节流和字符流,每种流又有输入流和输出流之分,分别用于数据的读取和写入。 1. **字节流**: - 字节流处理的是8位的字节数据,是最基本的流类型。Java中的`InputStream`和`...
这个"Java实现字节流与图片的转化Java实用源码整理learn"资料包,很显然,提供了关于如何在Java中进行这种转化的源代码实例。 首先,让我们了解字节流的基本概念。字节流分为输入流和输出流,它们分别是InputStream...
在Java编程语言中,字节流(Byte Stream)和字符流(Character Stream)是处理输入输出数据的两种基本方式。字节流主要用于处理任何类型的二进制数据,如图片、音频、视频等,而字符流则专为处理基于Unicode编码的...
java 字节与字符流,字符流转换
InputStreamReader将字节流转换为字符流,它需要一个字符集作为参数,用来解释字节流中的数据。OutputStreamWriter则执行相反的操作,将字符流转换回字节流,以便写入到输出流中。 在实际应用中,我们通常会根据...
- 字节流主要用于处理二进制数据,如图片、音频、视频等非文本文件,以及跨平台的数据传输。 2. **基本的字节输出流类** - `FileOutputStream`: 用于将数据写入到文件。通过构造函数传入文件路径,即可创建一个...
字节流主要用于处理二进制数据,如图片、音频、视频等非文本格式的文件。Java中的字节流主要由InputStream和OutputStream两大类构成,它们分别代表数据的输入和输出。InputStream是所有字节输入流的基类,包括...
字节流和字符流之间的转换是通过`InputStreamReader`和`OutputStreamWriter`实现的,它们可以将字节流转换为字符流,反之亦然。在处理文本数据时,如果使用字节流,需要考虑到字符编码问题,因为字节流不关心字符...
转换流如InputStreamReader和OutputStreamWriter,它们起到了字节流和字符流之间的桥梁作用,可以根据指定的字符编码将字节流转换为字符流,反之亦然。 此外,Java的IO流还提供了一些高级特性,比如**过滤流**。...
图片流是指图片数据的一种序列化形式,它可以是字节流或字符流,通常用于读取、写入或传输图片数据。Base64是一种编码方式,它将二进制数据转换为可打印的ASCII字符串,便于在网络上传输,因为HTTP协议和大多数电子...