下午没事干,想起那些往图片写个人文字的恶搞新闻,今天研究了一下,效果如下:

边研究边预览,发现几个问题:

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);

?>


17条评论

  1. 非常感谢提供资料

  2. <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>

  3. 哎呀,BLOGBUS的博客TB回来怎么这么丑呀!

    不好意思~~

  4. 汗,这个mm!

  5. 其实有很多这样的~~~~

    楼主可以收集下,以馈网友

  6. 能否将你的discuz的url美化hack给我一份?2.5的我改得累死了,现在4.0想偷偷懒:)

    shunza@gmail.com,谢谢!

  7. 我也一直在找,兄台可以把PHP的源码共享吗?

    我的邮箱: mydd16#163.com

  8. 要源码

  9. 有意思

  10. 原码网上就有,搜gb2312.txt就能找到那篇有bug的文章. 把原码中那一堆gb2312->utf-8的代码直接用php函数iconv代替即可。

  11. 老师能把你修复过bug的代码和使用方法给我研究一下吗?好奇怪哦。我刚开始学PHP,用google搜了半天都不知道到底什么是完整的东东。万分感谢 http://WWW.J2MEDEV.COM

    cqydxq@126.com

    祝:新年快乐。

  12. 更新了一下,给出代码,见上方文章最后部分。

    参考的原始代码在这里,但只能写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

  13. 那上面的一大堆偶都看不大懂。不过偶也没准备留下偶的网址。兴许跟偶没啥关系吧。。。

  14. iconv这个函数需要加模块

    不是每一个主机都能用!

    知道为什么这文章流行了吧?

发表评论

评论也有版权!