<?php
/**
功能:获得一个图片文件的尺寸大小,返回一个数组
参数:
filename:图片文件名
*/
function GetFileSize($filename){
$str = exec("identify '$filename'");
$s = split(" ",$str);
$s = split("x",$s[2]);
return $s;
$src_image_w=$s[0];
$src_image_h=$s[1];
}
/**
功能:将多个GIF文件合成一个
参数:
scr:原文件名列表
dst:目的文件名
pos_x,pos_y:合成后的图片位置列表
delay:图片间隔显示时间
loop:图片循环次数;0,无限循环
*/
function ComposeGIF($src = array(),$dst,$pos_x = array(),$pos_y = array(),$delay=100,$loop=0){
$s = GetFileSize($dst);
$src_image_w=$s[0];
$src_image_h=$s[1];
//$cmdline = "convert -delay
$delay -size ".$src_image_w."x".$src_image_h." -page +0+0 $dst";
for($i=0;$i<count($src);$i++){
//$cmdline .= " -page +".$pos_x[$i]."+".$pos_y[$i]." ".$src[$i];
$cmdline .=
"composite -geometry +".($pos_x[$i]+0)."+".($pos_y[$i]+0)." '".
$src[$i]."' $dst $dst";
$x=exec($cmdline);
}
}
/**
功能:创建一个GIF文件
参数:
dst:目的文件名
pos_x,pos_y:要创建的图片大小,象素
color:图片颜色
*/
function CreateGIF($dst,$pos_x,$pos_y,$color){
$cmdline = "convert -size $pos_x"."x"."$pos_y xc:$color $dst";
$x=exec($cmdline);
}
/**
功能:将一个字符串写入图片文件
参数:
str:字符串
src:源文件名
dst:目的文件名
pos_x,pos_y:要写入图片文件的位置
color:填充字的颜色
font:选用的字体
fontsize:选用的字号
*/
function Char2GIF($str,$src,$dst,$pos_x,$pos_y,$color,$font,$fontsize=22){
$utf_str = gb2utf8($str);
$cmdline = "convert -pointsize
$fontsize -encoding unicode -fill \"$color\" -font $font -draw \"text
".($pos_x+0).",".($pos_y+0)." '".$utf_str."'\" $src $dst";
$x=exec($cmdline);
}
/**
功能:将一个字符串写入图片文件,实现图文混排的内部函数每次调用生成一张JPG,以便最终合成为多帧动画GIF
参数:
string:字符串
background:选用的背景图,源文件名
dst:目的文件名
font:选用的字体
fontsize:选用的字号
pn:第n张图,pn为奇数或偶数的时候图片的位置不同(合成GIF会形成动画效果)
*/
function color_msg_in($string,$background,$dst,$font,$fontsize,$pn){
global $array_pic;
global $n_pic;
$font_array = array();
$font_array[0] = "/www/webroot/caizi/stxinwei.ttf";
$font_array[1] = "/www/webroot/caizi/stxinwei.ttf";
$font_array[2] = "/www/webroot/caizi/stxinwei.ttf";
//取原图片大小
$s = GetFileSize($background);
$src_image_w=$s[0];
$src_image_h=$s[1];
$array_pos_x = array();
$array_pos_y = array();
$array_scr = array();
//找一个字数尽可能多的词,是否对应一个图片
for(;strlen($string)!=0;){
$n++;
//echo ($string)."<br>";//调试语句*********************************************
for($k=strlen($string);$k>0;$k--){
$str = substr($string,0,$k);
//echo
$k."<br>";//调试语句*********************************************
if
(file_exists("/www/webroot/caizi/image/".$str.".gif")){
//有图片可以使用
$s = GetFileSize("/www/webroot/caizi/image/".$str.".gif");
$image_w=$s[0];
$image_h=$s[1];
if($next_x+$image_w<=$src_image_w){//加上当前图片,当前行不会超过右边界
$image_x = $next_x;
$image_y = $next_y;
}
else{//另起一行
$image_x = 0;
$next_y += $curr_height;
$curr_height = 0;
$image_y = $next_y;
$next_x = 0;
}
if($next_y+$image_h>$src_image_h){//加上当前图片,超过下边界
$fn=create_new_file("/www/webroot/caizi","result",".gif");
color_msg($string,$background,$fn,$font,$fontsize);
$array_pic[$n_pic++]=$fn;
return 0;
break;
}
//写入图片文件
$array_scr = array();
$array_scr[0] = "/www/webroot/caizi/image/".$str.".gif";
$array_pos_x[0]=$image_x;$array_pos_y[0]=$image_y;
if ($pn==1&&$n%2==0)$array_pos_y[0]++;
if ($pn==2&&$n%2==1)$array_pos_y[0]++;
ComposeGIF($array_scr,$dst,$array_pos_x,$array_pos_y);
$next_x += $image_w;//计算下一次要写的位置
if ($curr_height<$image_h) $curr_height=$image_h;
$string = substr($string,$k);//截掉已写入的字!
break;
}
if
(file_exists("/www/webroot/caizi/image/".$str.".jpg")){
//有图片可以使用
$s = GetFileSize("/www/webroot/caizi/image/".$str.".jpg");
$image_w=$s[0];
$image_h=$s[1];
if($next_x+$image_w<=$src_image_w){//加上当前图片,当前行不会超过右边界
$image_x = $next_x;
$image_y = $next_y;
}
else{//另起一行
$image_x = 0;
$next_y += $curr_height;
$curr_height = 0;
$image_y = $next_y;
$next_x = 0;
}
if($next_y+$image_h>$src_image_h){//加上当前图片,超过下边界
$fn=create_new_file("/www/webroot/caizi","result",".gif");
color_msg($string,$background,$fn,$font,$fontsize);
$array_pic[$n_pic++]=$fn;
return 0;
break;
}
//写入图片文件
$array_scr[0] = "/www/webroot/caizi/image/".$str.".jpg";
$array_pos_x[0]=$image_x;$array_pos_y[0]=$image_y;
if ($pn==1&&$n%2==0)$array_pos_y[0]++;
if ($pn==2&&$n%2==1)$array_pos_y[0]++;
ComposeGIF($array_scr,$dst,$array_pos_x,$array_pos_y,0);
$next_x += $image_w;//计算下一次要写的位置
if ($curr_height<$image_h) $curr_height=$image_h;
$string = substr($string,$k);//截掉已写入的字!
break;
}
if(($k==2&&$str>"~")||$k==1){//这是一个汉字,并且没有对应的图片,写入TTF汉字
$text_x = $next_x;
$text_y = $next_y;
//生成汉字随机色
$string_color = "#";
$c1 = dechex(rand(0,255));$c2 = dechex(rand(0,255));$c3 =
dechex(rand(0,255));
$string_color .= (strlen($c1)==1 ? ("0".($c1)) : ($c1));
$string_color .= (strlen($c2)==1 ? ("0".($c2)) : ($c2));
$string_color .= (strlen($c3)==1 ? ("0".($c3)) : ($c3));
//随机生成汉字使用的字体
$font_num = ($i/2) % count($font_array);
$font = $font_array[$font_num];
if($next_x+$fontsize<=$src_image_w){//加上当前图片,当前行不会超过右边界
$text_x = $next_x - 2;
$text_y = $next_y+$fontsize;
}
else{//另起一行
$text_x = 0;
$next_y += $curr_height;
$curr_height = 0;
$text_y = $next_y+$fontsize;
$next_x = 0;
}
if($next_y+$fontsize>$src_image_h){//加上当前图片,超过下边界
$fn=create_new_file("/www/webroot/caizi","result",".gif");
color_msg($string,$background,$fn,$font,$fontsize);
$array_pic[$n_pic++]=$fn;
return 0;
break;
}
//写入图片文件
$array_scr[0] = "/www/webroot/caizi/image/".$str.".gif";
$array_pos_x[0]=$text_x;$array_pos_y[0]=$text_y;
Char2GIF($str,$dst,$dst,$text_x,$text_y,$string_color,$font,$fontsize);
$next_x += $fontsize;//计算下一次要写的位置
if ($curr_height<$image_h) $curr_height=$image_h;
//截掉已写入的字!
$string = substr($string,$k);
break;
}
}//内循环
}//外循环
}
function create_new_file($path,$pre,$suf){
$tmpfname = tempnam($path,$pre);
rename($tmpfname, $tmpfname.$suf);
$tmpfname.=$suf;
return $tmpfname;
}
function color_msg($string,$background,$dst,$font,$fontsize){
$fn1=create_new_file("/www/webroot/caizi","tmp",".jpg");
$fn2=create_new_file("/www/webroot/caizi","tmp",".jpg");
$x=exec("cp /www/webroot/caizi/background.jpg $fn1");
$x=exec("cp /www/webroot/caizi/background.jpg $fn2");
color_msg_in($string,$background,$fn1,0,22,1);
color_msg_in($string,$background,$fn2,1,22,2);
exec("convert -delay 50 -size 128x128 -page +0+0 $fn1 -page +0+0 $fn2 -loop 0 $dst");
unlink($fn1);
unlink($fn2);
}
global $array_pic;
global $n_pic;
$array_pic = array();
/*
$fn=create_new_file("/www/webroot/caizi","result",".gif");
$n_pic=0;
$array_pic[$n_pic++]=$fn;
color_msg("将一个字符串写入图片文件,实现图文混排的内部函数每次调用生成一张JPG。将一个字符串写入图片文件,实现图文混排的内部函数每次调用生成一张JPG。","background.jpg",$fn,0,22);
switch($n_pic){
case 7: $n_pic = 3;break;
case 3: $n_pic = 2;break;
}
echo $n_pic."\n";
echo $array_pic[0]."\n";
$array_result = array();
$array_result[0] = $array_pic[0];
for ($i=1;$i<$n_pic;$i++){
$array_result[$i] = $array_pic[count($array_pic)-$i];
echo $array_result[$i]."\n";
}
for ($i=1;$i<count($array_pic);$i++){
if(!in_array($array_pic[$i],$array_result)) unlink($array_pic[$i]);
}
*/
?>
正文
彩字图片处理程序2005-09-14 13:53:00
【评论】 【打印】 【字体:大 中 小】 本文链接:http://blog.pfan.cn/yang/4736.html
阅读(369) | 评论(0)
版权声明:编程爱好者网站为此博客服务提供商,如本文牵涉到版权问题,编程爱好者网站不承担相关责任,如有版权问题请直接与本文作者联系解决。谢谢!
评论