1. 程式人生 > >使用nginx image filter實現類OSS物件儲存中對圖片的實時處理

使用nginx image filter實現類OSS物件儲存中對圖片的實時處理

使用Nginx image_filter實現類似OSS圖片處理

在家使用自己的電腦做了一個小應用,可檢視照片,按以前的方式,需要在使用者上傳圖片後對進行裁剪壓縮,然後給前段一個縮圖地址與原圖地址。這種方式有兩個弊端磁碟空間的浪費、縮圖尺寸調整不便捷。是否有其他不使用雲OSS儲存的情況下自己實現一套類似OSS的圖片處理?

後來搜尋資料,發現使用nginx的image_filter可以實現。根據網上其他人的例項使用沒有成功。

安裝nginx與imageFilter不在複述,自己從網上看文章就可以了。我使用的版本是nginx 1.13.12 直接自帶該外掛。

自己調整後可以使用,下面貼出完整配置。

server {
		listen 80;
		server_name 127.0.0.1;
		charset utf-8;
		root /www/uploadfile;

		#攔截所有帶“!”號的圖片請求
		location ~* ^(.*\.(?:jpg|gif|png|jpeg|bmp))!(.*){
		   #rewrite ^(.*\.(?:jpg|gif|png))! $1;

		   #圖片訪問路徑
		   set $filename $1;
		   #圖片壓縮尺寸
		   set $img_arg $2;
			#拆解處理尺寸引數,引數性質如200x400樣式
		   if ($img_arg ~ "^(\d+)x(\d+)") {
			   set $img_width $1;
			   set $img_height $2;
			}

			if ($img_arg ~ "^(\d+)$") {
			   set $img_width $1;
			   set $img_height "-";
			}

			if ($img_arg ~ "^x(\d+)") {
			   set $img_width "-";
			   set $img_height $1;
			}

		   if ( $img_width = "" ){
				set $img_width 100;
		   }

		   if ( $img_height = ""){
				set $img_height 100;
		   }
			#使用內部跳轉,將尺寸引數傳遞
		   echo_exec /_imgFilt;
		}
		#圖片處理
		location /_imgFilt {
		   alias /www/uploadfile$filename;

		   image_filter resize $img_width $img_height;
		   image_filter_buffer 10M;
		}

		location ~ .*\.(swf|docx|doc|xls|xlsx|txt|pdf|ppt|pptx|mp3|zip|rar|tar|gz|mp4|ttf|ttc|fmap|fmi|theme)$ {
				add_header 'Access-Control-Allow-Origin' '*';
				add_header 'Access-Control-Allow-Headers' 'X-Requested-With';
				add_header 'Access-Control-Allow-Methods' 'GET,POST,OPTIONS';
				expires      30d;
		}
}

圖片訪問請求地址: http://127.0.0.1/upload/20181120/1542720637600.jpg!500x400

使用以上請求,就可以實現使用nginx image filter實施圖片處理。 因是自己的小應用在使用,所以效能與訪問速度方面還可以。

非常耗費CPU資源,如果是公司業務,該方式請謹慎使用!!!