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

使用Nginx image_filter實現相似OSS圖片處理前端

在家使用本身的電腦作了一個小應用,可查看照片,按之前的方式,須要在用戶上傳圖片後對進行裁剪壓縮,而後給前端一個縮略圖地址與原圖地址。這種方式有兩個弊端磁盤空間的浪費、縮略圖尺寸調整不便捷。是否有其餘不使用雲OSS存儲的狀況下本身實現一套相似OSS的圖片處理?nginx

後來搜索資料,發現使用nginx的image_filter能夠實現。根據網上其餘人的實例使用沒有成功。性能

安裝nginx與imageFilter不在複述,本身從網上看文章就能夠了。我使用的版本是nginx 1.13.12 直接自帶該插件。插件

本身調整後能夠使用,下面貼出完整配置。code

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!500x400server

使用以上請求,就能夠實現使用nginx image filter實施圖片處理。 因是本身的小應用在使用,因此性能與訪問速度方面還能夠。圖片

很是耗費CPU資源,若是是公司業務,該方式請謹慎使用!!!ip

相關文章
相關標籤/搜索