PHPサービス側画像生成サムネイル

8476 ワード

<?php

/*

 * @author : xiaojiang

 * @time   : 2013-04-25

 */

//        

$picSize = array(

              '100_100'=> 1,

              '200_100'=> 1

           );

$imagePath = "../image/";

function parseUrl($url){

   preg_match("/(?P<name>[\w\d]+)_w(?P<width>\d+)_h(?P<height>\d+)\.(?P<ext>\w+)/",$url,$match);

   return $match;

}



$urlArr = explode("/",$_SERVER['REQUEST_URI']);

$imgName = $urlArr[count($urlArr)-1];

$picInfo = parseUrl($imgName);



//    

if(empty($picInfo['width']) || empty($picInfo['height']) ||

!array_key_exists($picInfo['width'].'_'.$picInfo['height'],$picSize)) die('        ');



$originalPic = $imagePath.$picInfo['name'].'/'.$picInfo['name'].'.'.$picInfo['ext'];

//      

if(!file_exists($originalPic)) die("     !");



/**

 *       

 */

switch($picInfo['ext']){

   case 'jpg':

      $orgImg = ImageCreateFromJpeg($originalPic);

      break;

   default: 

      break;

}



$owidth  =  ImageSX($orgImg); //    

$oheight =  ImageSY($orgImg);

$tW = $picInfo['width'];

$tH = $picInfo['height'];

//       

if($owidth/$oheight > $tW/$tH){

    $tH = intval($tW * $oheight/$owidth);

}else{

     $tW = intval($tH * $owidth/$oheight);

}

//     

$new_img = ImageCreateTrueColor($picInfo['width'], $picInfo['height']);

$bgColor = imagecolorallocate($new_img,255,255,255);



if (!@imagefilledrectangle($new_img, 0, 0, $picInfo['width']-1, $picInfo['height']-1, $bgColor)) {

    echo "       ";  //@todo    

    exit(0);

}



if (!@imagecopyresampled($new_img, $orgImg, ($picInfo['width']-$tW)/2, ($picInfo['height']-$tH)/2, 0, 0, $tW, $tH, $owidth, $oheight)) {

    echo "      ";

    exit(0);

}

//    

ob_start();

imagejpeg($new_img);

$_newImg = ob_get_contents();

ob_end_clean();

file_put_contents($imagePath.$picInfo['name']."/".$imgName, $_newImg);



header("Content-type:image/jpeg; charset=utf-8");

imagejpeg($new_img);

?>

このファイルには、apache confのdocumentError 404をバインドするhandlerが使用されます.