陕西网站建设企业,学编程多少钱学费,杭州手机网站,网页设计如何收费原来图片服务器采用Windows .net架构#xff0c;鉴于需求需要生成各种尺寸图片。流程说明:用户从Nginx请求对应的图片,判断是否存在_200x300的对应参数#xff0c;如果没有就直接请求到对应目录的原图#xff0c;否则继续判断是否在本地已经生成了对应的缓存图片#xff0c… 原来图片服务器采用Windows .net架构鉴于需求需要生成各种尺寸图片。流程说明:用户从Nginx请求对应的图片,判断是否存在_200x300的对应参数如果没有就直接请求到对应目录的原图否则继续判断是否在本地已经生成了对应的缓存图片如果存在返回已经生成过的定制尺寸图片否则请求PHP动态生成。Nginx部分配置: server {listen 80;server_name pics.abc.com;location / {root /var/www/html;index index.html index.htm index.php;error_page 500 502 503 504 /50x.html;location /50x.html {root html;}location ~ \_(\d)x(\d)\.(jpg|png|gif|jpeg|bmp)$ { //判断是否定制图try_files $uri /temp/$uri /get.php; //判断是否已生成过定制图否则转交给/get.phpexpires 30d;}location ~ \.php$ {fastcgi_pass 127.0.0.1:9000;fastcgi_index index.php;fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;include fastcgi_params;}location ~ .*\.(gif|jpg|jpeg|png|bmp)${expires 30d;}}}在/var/www/html我们以只读方式挂载Windows的目录修改/etc/fstab,添加\\192.168.2.3\f$\pics.abc.com\pics /var/www/html/pics/ cifs ro,usernameuser,passwordpass 1 2然后重启netfs服务另外执行下面命令安装依赖的包yum -y install samba-client cifs-utils
service netfs restart
chkconfig netfs on生成的缩率图会放到网站目录的temp目录下如请求的http://pics.abc.com/pics/201604/29/abc_200x300.jpg则生成的图片放在temp/pics/201604/29/abc_200x300.jpg目录下PHP脚本:function thumb($src, $width, $height, $filename, $mode scale, $quality 100) {
try {$p_w_picpathValue getp_w_picpathsize($src);$sourceWidth $p_w_picpathValue[0]; //原图宽$sourceHeight $p_w_picpathValue[1]; //原图高$thumbWidth $width; //缩略图宽$thumbHeight $height; //缩略图高$_x 0;$_y 0;$w $sourceWidth;$h $sourceHeight;if ($mode scale) {if ($sourceWidth $thumbWidth $sourceHeight $thumbHeight) {$_x floor(($thumbWidth - $sourceWidth) / 2);$_y floor(($thumbHeight - $sourceHeight) / 2);$thumbWidth $sourceWidth;$thumbHeight $sourceHeight;} else {if ($thumbHeight * $sourceWidth $thumbWidth * $sourceHeight) {$thumbHeight floor($sourceHeight * $width / $sourceWidth);$_y floor(($height - $thumbHeight) / 2);} else {$thumbWidth floor($sourceWidth * $height / $sourceHeight);$_x floor(($width - $thumbWidth) / 2);}}} else if ($mode crop) {if ($sourceHeight $thumbHeight) { //如果原图尺寸小于当前尺寸 $thumbWidth floor($thumbWidth * $sourceHeight / $thumbHeight);$thumbHeight $sourceHeight;}if ($sourceWidth $thumbWidth) {$thumbHeight floor($thumbHeight * $sourceWidth / $thumbWidth);$thumbWidth $sourceWidth;}$s1 $sourceWidth / $sourceHeight; //原图比例$s2 $width / $height; //新图比例if ($s1 $s2) {} else if ($s1 $s2) { //全高度 $y 0;$ax floor($sourceWidth * ($thumbHeight / $sourceHeight));$x ($ax - $thumbWidth) / 2;$w $thumbWidth / ($thumbHeight / $sourceHeight);} else { //全宽度 $x 0;$ay floor($sourceHeight * ($thumbWidth / $sourceWidth)); //模拟原图比例高度$y ($ay - $thumbHeight) / 2;$h $thumbHeight / ($thumbWidth / $sourceWidth);}}switch ($p_w_picpathValue[2]) {case 2: $source p_w_picpathcreatefromjpeg($src);break;case 1: $source p_w_picpathcreatefromgif($src);break;case 3: $source p_w_picpathcreatefrompng($src);break;case 6: $source p_w_picpathcreatefromwbmp($src);break;default: defulat();return;}header(Content-type: p_w_picpath/jpeg);$thumb p_w_picpathcreatetruecolor($width, $height);p_w_picpathfill($thumb, 0, 0, p_w_picpathcolorallocate($thumb, 255, 255, 255));p_w_picpathcopyresampled($thumb, $source, 0, 0, $x, $y, $width, $height, $w, $h);p_w_picpathjpeg($thumb, null, $quality);p_w_picpathjpeg($thumb, $filename, $quality);p_w_picpathdestroy($thumb);p_w_picpathdestroy($source);
} catch (Exception $ex) {defulat();}
}function defulat() {
/*$default_img realpath(../pictures/nopic.gif);ob_start();header(Content-type:p_w_picpath/jpeg);readfile($default_img);ob_flush();flush();
*/
echo error;
}function mkDirs($dir){if(!is_dir($dir)){if(!mkDirs(dirname($dir))){return false;}if(!mkdir($dir,0755)){return false;}}return true;
}$uri$_SERVER[REQUEST_URI];
$p_w_picpathbasename($uri);$temp./temp/.dirname($uri)./;
$imgpath..dirname($uri)./;/*
//检查本地是否存在文件原图
if(file_exists($temp.$p_w_picpath)){ob_start();header(Content-type:p_w_picpath/jpeg);readfile($temp.$p_w_picpath);ob_flush();flush();exit();
}
*///检查生成的图片是否曾经生成过存在即返回否则重新生成新图
if(!preg_match(/_(\d)x(\d)/, $p_w_picpath, $wh)){ob_start();header(Content-type:p_w_picpath/jpeg);readfile($imgpath.$p_w_picpath);ob_flush();flush();exit();
}$width $wh[1];
$height $wh[2];
$source_imgpreg_replace(/_(\d)x(\d)/, , $p_w_picpath);
//对长宽都超过的图片返回原图
if($width2000 || $height2000){ob_start();header(Content-type:p_w_picpath/jpeg);readfile($imgpath.$source_img);ob_flush();flush();exit();
}//图片处理
$src$imgpath.$source_img;
$filename$temp.$p_w_picpath;
mkDirs($temp);
//thumb(realpath($src), $width, $height, $filename, crop, 85);
thumb(realpath($src), $width, $height, $filename, crop, 100);PHP生成尺寸部分参考PHP图片自动裁切应付不同尺寸的显示如果上述服务器出现问题则降低的Nginx配置为 server {listen 80;server_name localhost;access_log logs/host.access.log main;location / {rewrite ^/(.*)\_(\d)x(\d)\.(.*)$ /$host/$1 permanent;rewrite ^/([0-9a-zA-Z])/(.*)$ /$host/$1/$2 permanent;root html;index index.html index.htm;}} 转载于:https://blog.51cto.com/fengwan/1769043