图片本地化代码及支持多格式图片缩略的phpThumb
首先说下从WP主题Swift中提取的图片本地化代码:
function image_domain($image_url){
$url_1=get_bloginfo('url');
$url_2=$image_url;
$url_stuff1 = parse_url($url_1);
$url_stuff2 = parse_url($url_2);
if($url_stuff1['host']==$url_stuff2['host'])
return 1;
else
return 0;
}
function http_get_file($url,$pID,$imgtype){
$url_stuff = parse_url($url);
$port = isset($url_stuff['port']) ? $url_stuff['port']:80;
$fp = fsockopen($url_stuff['host'], $port);
$query = 'GET ' . $url_stuff['path'] . " HTTP/1.0\n";
$query .= 'Host: ' . $url_stuff['host'];
$query .= "\n\n";
fwrite($fp, $query);
while ($line = fread($fp, 1024)) {
$buffer .= $line;
}
preg_match('/Content-Length: ([0-9]+)/', $buffer, $parts);
$data= substr($buffer, - $parts[1]);
$wud = wp_upload_dir();
$uploaddir=U_DIR.'/swift_custom';
if(!is_dir($uploaddir))
$make = @mkdir($uploaddir,0777);
$path=$uploaddir.'/'.$pID.$imgtype;
$fp=fopen($path,'w');
fwrite($fp,$data);
$loc = U_URL.'/swift_custom/'.$pID.$imgtype;
return $loc;
}
function getimgtype($imgtype){
$bmp='.(bmp|BMP)';
$gif='.(gif|GIF)';
$jpg='.(jpg|JPG|jpeg|JPEG)';
$png='.(png|PNG)';
if(eregi($bmp,$imgtype)){$imgtype='.bmp';}
else if(eregi($gif,$imgtype)){$imgtype='.gif';}
else if(eregi($jpg,$imgtype)){$imgtype='.jpg';}
else if(eregi($png,$imgtype)){$imgtype='.png';}
//echo $imgtype;
return $imgtype;
}
function thumb($id,$content){
//Getting the image url from custom field
$img = get_post_meta($id, 'image', $single = true);
if($img!=NULL &&$img!='')
return $img;
$find_img=get_post_meta($id, 'swift_find_img', $single = true);
if($find_img=='false'){
if(!get_option( 'upload_url_path' ))
$img=WP_CONTENT_URL.'/uploads/swift_default.jpg';
else
$img=get_option( 'upload_url_path' ).'/swift_default.jpg';
return $img;
}
//If there is no image specified in custom fields, get image from the content.
if($img==NULL ||$img==''){
//Extracting the content of the post to do a pattern match
//A simple regular expression to identify image urls.
$searchimages = '~http://[^>]*.(jpg|JPG|jpeg|JPEG|gif|GIF|png|PNG|bmp|BMP)~';
preg_match( $searchimages, $content, $pics );
$iNumberOfPics = count($pics[0]);
if ( $iNumberOfPics > 0 ){
$img=$pics[0];
if(!image_domain($img))
$imgtype=getimgtype($img);
$img=http_get_file($img,$id,$imgtype);
add_post_meta($id, 'image', $img,true) or update_post_meta($id, 'image', $img);
}
}
if($img==NULL ||$img==''){
add_post_meta($id, 'swift_find_img', 'false',true) or update_post_meta($id, 'swift_find_img', 'false');
if(!get_option( 'upload_url_path' ))
$img=WP_CONTENT_URL.'/uploads/swift_default.jpg';
else
$img=get_option( 'upload_url_path' ).'/swift_default.jpg';
}
return $img;
}
?>原来Swift中下载远程图片时,会将任何格式的图片都保存成jpg格式,这导致了接下来timthumb读取这些jpg图片时会出错。所以,我简单添加了识别图片扩展名的功能,这样保存的图片就和原图一样了。当然这还不完美,因为远程图片的扩展名可能本身并不同于其格式,导致虽然保存下来的图片扩展名和原图相同,但在使用timthumb缩略时依旧报错。另外一个重要的问题是GD库本身没有imagecreatefrombmp等函数,导致基于GD的timthumb只能处理jpg,png,gif等格式的图片,有一定的局限性。
经过多方寻找,在sourceforge找到了phpThumb,这么说吧timthumb就是它的精简版,功能自然phpThumb更强。不但支持的图片格式多,而且能准确识别图片的格式(不单单从扩展名)。
经过一番整理,我将Swift的缩略功能做了一点替换,感觉效率提高了一些。



“保存成jpg格式, timthumb读取这些jpg图片时会出错”, 我想是其它原因, 不是格式問題. 辨別格式的功能是在客戶端的瀏覽器, 我猜想它可能漏了定義文件類型.
[回复]
冷焰心 回复:
五月 18th, 2010 at 10:24 下午
这样么 我尝试将gif、png、jpg等图片的扩展名相互调换,timthumb总是无法识别。
[回复]
换了个高亮代码插件WP-SynHighlight,效果好多了。
[回复]