在我们的项目中,涉及到大量的图片传输。包括用户发布的需求、用户分享的信息等,无一不是图片为主的形式。因此,解决图片问题,是服务端的重要问题。
关于图片的处理方式,主要有两种方案,一个是压缩存储,分成原图与缩略图两套图片;另一个是搭建Nginx反向代理服务器,分担图片传输压力。
图片压缩
针对图片进行压缩,形成指定格式的小图片。此处给出代码:
Nginx反向代理服务器
反向代理方式是指以代理服务器来接受internet上的连接请求,然后将请求转发给内部网络上的服务器,并将从服务器上得到的结果返回给internet上请求连接的客户端,此时代理服务器对外就表现为一个服务器。
图片服务器的优势
1.分担Web服务器的I/O负载-将耗费资源的图片服务分离出来,提高服务器的性能和稳定性。
2.能够专门对图片服务器进行优化-为图片服务设置有针对性的缓存方案,减少带宽成本,提高访问速度。
3.提高网站的可扩展性-通过增加图片服务器,提高图片吞吐能力。
图片服务器的注意事项
1.选择适合图片存储的物理介质和文件系统
2.使用物理上独立的服务器
3.如果拥有多台图片服务器,要考虑服务器之间的图片同步问题
4.使用独立域名
5.制定合理的缓存策略
6.使用图片处理模块对用户上传的图片进行再加工
配置方式参考:
http://www.open-open.com/lib/view/open1417488526633.html
关于图片的处理方式,主要有两种方案,一个是压缩存储,分成原图与缩略图两套图片;另一个是搭建Nginx反向代理服务器,分担图片传输压力。
图片压缩
针对图片进行压缩,形成指定格式的小图片。此处给出代码:
/**
* 保持宽高比压缩图片,使之恰好嵌入到边界矩形<br>
* (转换参考:Image=ImageIcon.getImage,ImageIcon=new ImageIcon(Image)。)
*
* @param image_input
* 要压缩的图片对象
* @param rect_width
* 边界矩形的宽
* @param rect_hight
* 边界矩形的高
* @return 压缩后的图片
*/
public static Image ZipImage(Image image_input, int rect_width, int rect_hight) {
ImageIcon image = new ImageIcon(image_input);
// 如果图片宽度大于rect_width,保持宽高比压缩宽至rect_width
if (image.getIconWidth() > rect_width) {
int image_hight = (int) (image.getIconHeight() * ((double) rect_width / image.getIconWidth()));
image.setImage(image.getImage().getScaledInstance(rect_width, image_hight, Image.SCALE_DEFAULT));
}
// 如果压缩后图片高度超过rect_hight,保持宽高比将高度压缩至rect_hight(此时宽一定小于rect_hight)
if (image.getIconHeight() > rect_hight) {
int image_hight = (int) (image.getIconWidth() * ((double) rect_hight / image.getIconHeight()));
image.setImage(image.getImage().getScaledInstance(image_hight, rect_hight, Image.SCALE_DEFAULT));
}
return image.getImage();
}
然后,在传输时,区分情况,根据不同的请求,给予不同的图片地址进行返回。Nginx反向代理服务器
反向代理方式是指以代理服务器来接受internet上的连接请求,然后将请求转发给内部网络上的服务器,并将从服务器上得到的结果返回给internet上请求连接的客户端,此时代理服务器对外就表现为一个服务器。
图片服务器的优势
1.分担Web服务器的I/O负载-将耗费资源的图片服务分离出来,提高服务器的性能和稳定性。
2.能够专门对图片服务器进行优化-为图片服务设置有针对性的缓存方案,减少带宽成本,提高访问速度。
3.提高网站的可扩展性-通过增加图片服务器,提高图片吞吐能力。
图片服务器的注意事项
1.选择适合图片存储的物理介质和文件系统
2.使用物理上独立的服务器
3.如果拥有多台图片服务器,要考虑服务器之间的图片同步问题
4.使用独立域名
5.制定合理的缓存策略
6.使用图片处理模块对用户上传的图片进行再加工
配置方式参考:
http://www.open-open.com/lib/view/open1417488526633.html
后来我们经过分析,使用了图片压缩的机制。