JMagic 切割图片时,使用多线程异步大幅提高性能
由于使用 jQuery blueimp 的上传组件及 yoxView 显示组件,图片上传后自动切割成8个不同规格的图片,如果采用单线程处理 10x3M 的文件需要 2分20秒,如果加入了多线程异步(并做了单线程优先生成即时显示的缩略图)需要 53秒,完成任务是一样的,而对于前端的用户体验差别明显。
...
if(profile != null){
final ThumbnailSize[] sizes = profile.getSizes();
final String finalNewFilePath =newFilePath;
final boolean keepRatio = true;
if(sizes.length>0){
// 特殊处理,先切割前端即时显示的缩略图
if(IS_PREGENERATE_THUMBNAIL){
final int width_ = PREGENERATE_THUMBNAIL_SIZE.getWidth();
final int height_ = PREGENERATE_THUMBNAIL_SIZE.getHeight();
String thumbnailPath = PhotoBean.getPhotoThnumailPath(photo.getVolumeId(), photo.getId(),suffix, width_, height_);
final String thumbnailPath_ = FileUtil.getFilePathUploadFileUri(thumbnailPath);
ImageUtil.resize(finalNewFilePath, thumbnailPath_, width_, height_, keepRatio);
}
// 处理余下的尺寸
for(int i=0; i<sizes.length; i++){
// 略过之前即时处理过的尺寸
if(IS_PREGENERATE_THUMBNAIL &&(sizes[i].getWidth()==PREGENERATE_THUMBNAIL_SIZE.getWidth())
&&(sizes[i].getHeight()==PREGENERATE_THUMBNAIL_SIZE.getHeight())){
continue;
}
final int width_ = sizes[i].getWidth();
final int height_ = sizes[i].getHeight();
String thumbnailPath = PhotoBean.getPhotoThnumailPath(photo.getVolumeId(), photo.getId(),suffix, width_, height_);
final String thumbnailPath_ = FileUtil.getFilePathUploadFileUri(thumbnailPath);
Runnable syncResizeImage= new Runnable() {
public void run() {
ImageUtil.resize(finalNewFilePath, thumbnailPath_, width_, height_, keepRatio);
if (width_ >= 600)//只有当待切割的图片宽大于或等于600时才打印上水印
ImageWatermarksUtil.pressImage(watermarkerImgPath, thumbnailPath_, 20, 20);
System.out.println("newFilePath=="+finalNewFilePath +",--"+thumbnailPath_+","+width_+","+height_+","+keepRatio);
}
};
this.execute(syncResizeImage);
}
}
}
...
...
private void execute(Runnable runnable){
if(this.executor==null){
logger.debug("New fixed Thread Pool size is 10.");
this.executor =Executors.newFixedThreadPool(10);
}
executor.execute(runnable);
}
...
分享到:
相关推荐
Cacti是一款开源的网络监控和图形性能工具,主要用于收集、绘图以及管理网络设备的性能数据。"cacti-plugin-arch-2.0.tar.gz" 是一个针对Cacti的插件包,用于扩展Cacti的功能,提供更丰富的监控选项。此插件名为...
Arch-Linux-Install-ScriptArch_Linux_安装脚本_Arch-Linux-Installer
Next Generation On Demand (NGOD) Asset Architecture Comcast-SP-NGOD-ASSET-ARCH-I03-100731 Issued July 31, 2010
标题“Arch-03-08-热敏打印机集成方法”指的是关于在计算机系统或应用程序中集成热敏打印机的技术过程。热敏打印机是一种利用热敏纸进行打印的设备,广泛应用于零售、餐饮和其他需要快速、小票打印的场景。集成热敏...
标题“Arch-03-15- Nginx+tomcat 配置负载均衡动静分离”涉及的是在Web服务器架构中使用Nginx与Tomcat的集成,通过配置实现负载均衡和动静态资源分离。这样的架构可以提高系统的可用性和响应速度,减轻后端应用...
变系数ARCH-M模型是时间序列分析领域的重要研究对象,其核心在于通过截面似然估计来检验模型是否具有条件异方差性(ARCH效应)。首先,我们来探讨一下条件异方差性的概念,它是指在时间序列分析中,随机变量的条件...
基于android8.1源码平台中生成的jar,亲测可用!!!!
OpenRISC是一种开源的指令集架构(ISA),它致力于提供一个简单、易于实现和使用的处理器核心,适用于广泛的嵌入式系统和应用程序。该文档是关于OpenRISC1000架构的手册,版本号为1.0,修订号为0,发布日期为2012年...
标题中的"Python库 | arch-4.11-cp35-cp35m-win32.whl"指的是一个特定版本的Python库,名为“arch”,版本为4.11,适用于Python 3.5解释器(由"cp35"标识),且是针对32位Windows操作系统("win32")的。"cp35m"表示...
arch-snds100驱动程序是专为s3c44b0x处理器设计的一款核心驱动,用于管理和优化硬件资源的使用。...通过深入理解驱动的工作原理和使用方法,开发人员可以更好地优化系统性能,提高设备的兼容性和稳定性。
Next Generation On Demand (NGOD) Overall Architecture Comcast-SP-NGOD-GEN-ARCH-I03-100731 Issued July 31, 2010
python库。 资源全名:arch-4.8.0-cp27-cp27m-win32.whl
保存我曾经安装arch时使用的一些配置和笔记_arch-linux
NULL 博文链接:https://cnmqw.iteye.com/blog/1243596
基于 Arch Linux 的 OpenWrt Buildroot 这是一个用于 OpenWrt buildroot 的基于 Arch Linux 的 docker 容器。 源自 因为构建系统要求它的命令不能被root执行,所以创建了用户openwrt。 buildroot 可以在/home/...
资源来自pypi官网。 资源全名:arch-4.17-cp39-cp39-manylinux1_x86_64.whl
在使用这份文件时,开发者需要意识到,文件中所提供的信息是“按原样”提供的,作者和开发者对文档内容不提供任何明示或暗示的保证,包括但不限于对商品性或对特定目的的适用性的隐含保证。此外,开放互连联盟(OIC...
资源来自pypi官网。 资源全名:arch-4.9.1-cp36-cp36m-macosx_10_6_intel.whl
接着的“cp27m”中的“m”通常表示该轮子支持多线程(multi-threading)的动态链接库。 **架构与平台标识 (manylinux1_x86_64)** "manylinux1_x86_64" 表示这个轮子文件是为Linux平台设计的,特别是兼容"manylinux1...