注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

@fc_lamp

关注Web应用解决方案MySql/PHP/Python一盏名为"飞川"的灯~

 
 
 

日志

 
 

PHP如何用文本来显示(描绘)图像(片)  

2010-04-02 16:29:00|  分类: Web技术-Php |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
PHP如何用文本来显示(描绘)图像(片)
PHP在处理图像上,那是相当厉害,功能超过你的想象,用PHP来实现文本显示图像
PHP代码如下:
<?php
/**
* 用字符来描绘图片
* @author FC
*
*/

class myTextImage{
/**
*string,$image_path:图像地址
*string,$userCharacter:使用的字符
*/


public function img($image_path,$userCharacter = ''){
$image_infor = @getimagesize($image_path);//取得图像信息
if(!$image_infor){
die('图片地址不存在');???
}
//确实图像类型
switch($image_infor[2]){
case 1:
$img_x = $image_infor[0];
$img_y = $image_infor[1];??? ??? ???
$img?? = imagecreatefromgif($image_path);
break;
case 2:
$img_x = $image_infor[0];
$img_y = $image_infor[1];??? ??? ???
$img?? = imagecreatefromjpeg($image_path);
break;
default:
$img_x = $image_infor[0];
$img_y = $image_infor[1];??? ??? ???
$img?? = imagecreatefrompng($image_path);??? ??? ??? ??? ??? ??? ???
}
$character = '#';
if(!empty($userCharacter)){
$character = $userCharacter;
}
//按比例缩小图片
if($img_y > 100){

$max_x = $img_x / 8;
$max_y = $img_y / 10;???

}elseif($img_y<100 and $img_y > 48){
$max_x = $img_x / 1;
$max_y = $img_y / 2;??? ??? ??? ????
}else{
$max_x = $img_x ;
$max_y = $img_y ; ???
}
$dst = imagecreatetruecolor($max_x,$max_y);
imagecopyresampled($dst,$img,0,0,0,0,$max_x,$max_y,$img_x,$img_y);//重采样拷贝部分图像并调整大小
$max_x = imagesx($dst);
$max_y = imagesy($dst);
for($y = 0;$y<$max_y;$y++){
for($x=0;$x<$max_x;$x++){
$color = imagecolorat($dst,$x,$y);//返回 image 所指定的图形中指定位置像素的颜色索引值(十进制表示)。
$rgb?? = imagecolorsforindex($dst,$color);//返回一个具有 red,green,blue 和 alpha 的键名的关联数组,包含了指定颜色索引的相应的值(十进制表示)。

// 将十进制打印成十六进制.'%02x','%'标识,'0'将输出的前面补上0,直到占满指定列宽为止
//'2'宽度至少为n位,不够以空格填充 ,'x'无符号的16进制数字,并以小写abcdef表示
$text? = '<font color=#%02x#%02x#%02x>'.$character.'</font>';
printf($text,$rgb['red'],$rgb['green'],$rgb['blue']);
}
echo '<br/>';
}
imagedestroy($dst);
}
}

//CSS样式??? ???
echo<<<css
<style>???
.img{
margin:0 10px 0 0;
float:left;
}
.img{
color:#ff0000;
}
</style>???
css;

$imgObj = new myTextImage();
$image_path = BASEURL.'res/images/s.jpg';
echo '<div class="img">';
echo '<span class="w">字符图</span>:<br/>';
$imgObj->img($image_path,9);
echo '</div>';
echo '<div class="img"><span class="w">原图</span>:<br/><img src="'.$image_path.'"/></div>';

?>

效果如下图:

PHP如何用文本来显示(描绘)图像(片) - fc-lamp - fc-lamp的博客







另外注:
如何将十进制的颜色值转为16进制(#FF00FF),我们可以借助于PHP的格式化打印函数vsprintf,printf,sprintf等来实现。
其格式(format)有如下值:
d 有符号10进制整数
i 有符号10进制整数
o 无符号8进制整数
u 无符号10进制整数
x 无符号的16进制数字,并以小写abcdef表示
X 无符号的16进制数字,并以大写ABCDEF表示
F/f 浮点数
E/e 用科学表示格式的浮点数
g 使用%f和%e表示中的总的位数表示最短的来表示浮点数 G 同g格式,但表示为指数
c 单个字符
s 字符串
% 显示百分号本身

另外 vsprintf的使用方式:
$r_16 = '#%02x';//实际上可以直接写为'#%x'
$r? = 102;
$s = vsprintf($r_16,array($r));//vsprintf不会直接打印出值来
echo $s;exit;
'#%02x'的意思是:将十进制打印成十六进制.'%02x','%'标识,'0'将输出的前面补上0,直到占满指定列宽为止,
'2'宽度至少为n位,不够以空格填充 ,'x'无符号的16进制数字,并以小写abcdef表示.
  评论这张
 
阅读(202)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017