下午没事干,想起那些往图片写个人文字的恶搞新闻,今天研究了一下,效果如下:
边研究边预览,发现几个问题:
1. PHP的GD库真是好东西
2.在国内找点原创技术文章真困难,万一原创那个版本不能用,你就没机会在国内找到能用的。比如这个需要解决GB2312到UTF-8字符转换问题,原创那篇文章需要用一个叫GB2312.txt的文件(估计是一个数组表),结果作者当时没有提供,而且把很复杂耗时的文件操作放到循环体内,搞笑的是100多个转载的网站没一个提供GB2312.txt下载,没一个把错误修复一下(用他们最擅长的Ctrl+V把读文件操作移到循环外面),结果我到现在都没找到这个GB2312.txt。好在php其实有现成的函数叫iconv。
3. 比2更困难的是找跟中文有关的技术文章时恰巧那个原创帖子有问题,这时因为涉及到中文,没法到英文Google去搜。比如我想找一个用Javascript实现中文BASE 64编码的代码,结果找到的全是现用escape处理中文在用老外的那套编码处理的文章。但是这个方法是错误的,这样编码出来的根本不是BASE 64,可我们国内网站转来转去当宝贝,只有CSDN一个留言提出了这个错误。
1月2日更新 - 很多人说代码不好找,帖我的代码如下,加了注释。运行前确保主机商装了PHP的GD库:
<?php
$txt= 下午没事干,想起那些往图片写个人文字的恶搞新闻,今天研究了一下,效果如下:边研究边预览,发现几个问题: 1. PHP的GD库真是好东西 2.在国内找点原创技术文章真困难,万一原创那个版本不能用,你就没机会在国内找到能用的。比如这个需要解决GB2312到UTF-8字符转换问题,原创那篇文章需要用一个叫GB2312.txt的文件(估计是一个数组表),结果作者当时没有提供,而且把很复杂耗时的文件操作放到循环体内,搞笑的是100多个转载的网站没一个提供GB2312.txt下载,没一个把错误修复一下(用他们最擅长的Ctrl+V把读文件操作移到循环外面),结果我到现在都没找到这个GB2312.txt。好在php其实有现成的函数叫iconv。 3. 比2更困难的是找跟中文有关的技术文章时恰巧那个原创帖子有问题,这时因为涉及到中文,没法到英文Google去搜。比如我想找一个用Javascript实现中文BASE 64编码的代码,结果找到的全是现用escape处理中文在用老外的那套编码处理的文章。但是这个方法是错误的,这样编码出来的根本不是BASE 64,可我们国内网站转来转去当宝贝,只有CSDN一个留言提出了这个错误。 1月2日更新 - 很多人说代码不好找,帖我的代码如下,加了注释。运行前确保主机商装了PHP的GD库: <?php
___FCKpd___0?>
GET['txt'];
if($txt=='')
{
$txt = '用户没有传递任何文字';
}
//以下if语句为了让文字过短时在前面补上空格
//具体数值会因选择的图片而发生变化,需要自己试验
$l=strlen($txt);
if($l<20)
{
$l=(20-$l)/2;
for($i=0; $i<$l; $i++)
{
$txt=' ' . $txt;
}
}
//这个是php的内置函数,代替复杂的读取gb2312.txt表操作
//如有问题可以看http://us2.php.net/iconv的描述
$string = iconv('GB2312', 'UTF-8', $txt);
//把这个中文字体从windows/fonts目录上传到程序目录
$ttf = 'simfang.ttf';
//source.jpg是可怜MM的原始照片
$im = imagecreatefromjpeg("source.jpg";);
//写字的位置, x=0 y=0代表图片左上角
$x=230;
$y=245;
//文字颜色
$text_color = imagecolorallocate ($im, 0, 0, 0);
//阴影颜色
$grey = imagecolorallocate($im, 128, 128, 128);
//写文字阴影先,可以试试$x+1, $y+1的位置
imagettftext($im, 12, 10, $x, $y, $grey, $ttf, $string);
//再写文字
imagettftext($im, 12, 10, $x, $y, $text_color, $ttf, $string);
//告诉浏览器这是jpeg而不是php
header('Content-type: image/jpeg');
//输出jpeg
imagejpeg ($im);
//删除$im“所指”对象
imagedestroy($im);
?>
非常感谢提供资料
蜀狂 —— 2005年12月26日 @10:45 am
tinyfool —— 2005年12月28日 @12:56 am
<p><img alt=\"http://static.flickr.com/39/78316191_5c3cb2db4b.jpg\" hspace=\"0\" src=\"http://static.flickr.com/39/78316191_5c3cb2db4b.jpg\" align=\"baseline\" border=\"0\" /></p><p><strong>“我只爱乌白菜 别人我理都不理”</strong></p><p>这可不是我女朋友。难道我走桃花运了?</p><p>不是的啦!</p><p /><p>在<a href=\"http://blog.donews.com/tinyfool/\" target=\"_blank\">TINYFOOL</a>的BLOG看到了这东西,找到了<a href=\"http://blog.donews.com/concorde/archive/2005/12/25/670754.aspx\" target=\"_blank\">这文章</a>,用<a href=\"http://www.flyeon.com/forum/43-1.html\" target=\"_blank\">这个工具</a>制作的一张图。</p>
乌白菜's Blog Woobc's Weblog —— 2005年12月28日 @12:18 pm
哎呀,BLOGBUS的博客TB回来怎么这么丑呀!
不好意思~~
乌白菜 —— 2005年12月28日 @12:20 pm
汗,这个mm!
sillyfire —— 2005年12月28日 @1:14 pm
其实有很多这样的~~~~
楼主可以收集下,以馈网友
leesum —— 2005年12月28日 @2:03 pm
能否将你的discuz的url美化hack给我一份?2.5的我改得累死了,现在4.0想偷偷懒:)
shunza@gmail.com,谢谢!
shunz —— 2005年12月28日 @2:06 pm
我也一直在找,兄台可以把PHP的源码共享吗?
我的邮箱: mydd16#163.com
顶点书生 —— 2005年12月28日 @2:14 pm
要源码
流行音乐 —— 2005年12月28日 @2:27 pm
有意思
音乐铃声 —— 2005年12月28日 @2:27 pm
原码网上就有,搜gb2312.txt就能找到那篇有bug的文章. 把原码中那一堆gb2312->utf-8的代码直接用php函数iconv代替即可。
concorde —— 2005年12月28日 @3:16 pm
哈哈道士 —— 2005年12月28日 @11:52 pm
老师能把你修复过bug的代码和使用方法给我研究一下吗?好奇怪哦。我刚开始学PHP,用google搜了半天都不知道到底什么是完整的东东。万分感谢 http://WWW.J2MEDEV.COM
cqydxq@126.com
祝:新年快乐。
cqydxq@126.com —— 2006年01月02日 @12:36 pm
更新了一下,给出代码,见上方文章最后部分。
参考的原始代码在这里,但只能写ASCII:
Adding Custom Text to an Image Using PHP
http://www.developertutorials.com/tutorials/php/adding-custom-text-to-image-050620/page1.html
发现无法显示中文后找到了篇转来转去的文章:
http://www.xker.com/Html/bcyy/php/20051219318.html
关于iconv的说明:
http://us2.php.net/iconv
concorde —— 2006年01月02日 @4:27 pm
那上面的一大堆偶都看不大懂。不过偶也没准备留下偶的网址。兴许跟偶没啥关系吧。。。
懒猫 —— 2006年01月21日 @10:36 pm
iconv这个函数需要加模块
不是每一个主机都能用!
知道为什么这文章流行了吧?
btobtrans.com —— 2006年03月16日 @3:49 pm