Arch-03-13-JMagic 切割图片时,使用多线程异步大幅提高性能

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);

   }

...
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值