Home  >  Article  >  Backend Development  >  PHP picture strokes and mosaic (example)

PHP picture strokes and mosaic (example)

WBOY
WBOYOriginal
2016-07-25 08:55:141119browse
  1. /**
  2. * GD image text outer
  3. *
  4. * @copyright UGiA.CN
  5. * [url=home.php?mod=space&uid=17823]@LINK[/url] www.ugia.cn/?p=88
  6. * @edit bbs.it-home.org
  7. */
  8. function imagetextouter(&$im, $size, $x, $y, $color, $fontfile, $text, $outer)
  9. {
  10. if (!function_exists('ImageColorAllocateHEX'))
  11. {
  12. function ImageColorAllocateHEX($im, $s)
  13. {
  14. if($s{0} == "#") $s = substr($s,1);
  15. $bg_dec = hexdec($s);
  16. return imagecolorallocate($im,
  17. ($bg_dec & 0xFF0000) >> 16,
  18. ($bg_dec & 0x00FF00) >> 8,
  19. ($bg_dec & 0x0000FF)
  20. );
  21. }
  22. }
  23. $ttf = false;
  24. if (is_file($fontfile))
  25. {
  26. $ttf = true;
  27. $area = imagettfbbox($size, $angle, $fontfile, $text);
  28. $width = $area[2] - $area[0] + 2;
  29. $height = $area[1] - $area[5] + 2;
  30. }
  31. else
  32. {
  33. $width = strlen($text) * 10;
  34. $height = 16;
  35. }
  36. $im_tmp = imagecreate($width, $height);
  37. $white = imagecolorallocate($im_tmp, 255, 255, 255);
  38. $black = imagecolorallocate($im_tmp, 0, 0, 0);
  39. $color = ImageColorAllocateHEX($im, $color);
  40. $outer = ImageColorAllocateHEX($im, $outer);
  41. if ($ttf)
  42. {
  43. imagettftext($im_tmp, $size, 0, 0, $height - 2, $black, $fontfile, $text);
  44. imagettftext($im, $size, 0, $x, $y, $color, $fontfile, $text);
  45. $y = $y - $height + 2;
  46. }
  47. else
  48. {
  49. imagestring($im_tmp, $size, 0, 0, $text, $black);
  50. imagestring($im, $size, $x, $y, $text, $color);
  51. }
  52. for ($i = 0; $i {
  53. for ($j = 0; $j {
  54. $c = ImageColorAt($im_tmp, $i, $j);
  55. if ($c !== $white)
  56. {
  57. ImageColorAt ($im_tmp, $i, $j - 1) != $white || imagesetpixel($im, $x + $i, $y + $j - 1, $outer);
  58. ImageColorAt ($im_tmp, $i, $j + 1) != $white || imagesetpixel($im, $x + $i, $y + $j + 1, $outer);
  59. ImageColorAt ($im_tmp, $i - 1, $j) != $white || imagesetpixel($im, $x + $i - 1, $y + $j, $outer);
  60. ImageColorAt ($im_tmp, $i + 1, $j) != $white || imagesetpixel($im, $x + $i + 1, $y + $j, $outer);
  61. // 取消注释,与Fireworks的发光效果相同
  62. /*
  63. ImageColorAt ($im_tmp, $i - 1, $j - 1) != $white || imagesetpixel($im, $x + $i - 1, $y + $j - 1, $outer);
  64. ImageColorAt ($im_tmp, $i + 1, $j - 1) != $white || imagesetpixel($im, $x + $i + 1, $y + $j - 1, $outer);
  65. ImageColorAt ($im_tmp, $i - 1, $j + 1) != $white || imagesetpixel($im, $x + $i - 1, $y + $j + 1, $outer);
  66. ImageColorAt ($im_tmp, $i + 1, $j + 1) != $white || imagesetpixel($im, $x + $i + 1, $y + $j + 1, $outer);
  67. */
  68. }
  69. }
  70. }
  71. imagedestroy($im_tmp);
  72. }
  73. ?>
复制代码

2,调用示例:

  1. header("Content-type: image/png");
  2. $im = imagecreatefromjpeg("bluesky.jpg");
  3. $white = imagecolorallocate($im, 255,255,255);
  4. imagetextouter($im, 9, 10, 20, '#000000', "simsun.ttc", '新年快乐', '#ffffff');
  5. imagetextouter($im, 2, 10, 30, '#FFFF00', "", 'hello, world!' , '#103993');
  6. imagepng($im);
  7. imagedestroy($im);
  8. ?>
复制代码

再来说马赛克:void imagemask ( resource image, int x1, int y1, int x2, int y2, int deep) imagemask() 把坐标 x1,y1 到 x2,y2(图像左上角为 0, 0)的矩形区域加上马赛克。 deep为模糊程度,数字越大越模糊。

效果,如下图:

PHP picture strokes and mosaic (example)

1,马赛克函数代码:

  1. /**
  2. * GD image mask
  3. *
  4. * @edit bbs.it-home.org
  5. */
  6. function imagemask(&$im, $x1, $y1, $x2, $y2, $deep)
  7. {
  8. for($x = $x1; $x {
  9. for ($y = $y1; $y {
  10. $color = ImageColorAt ($im, $x + round($deep / 2), $y + round($deep / 2));
  11. imagefilledrectangle ($im, $x, $y, $x + $deep, $y + $deep, $color);
  12. }
  13. }
  14. }
  15. ?>
复制代码

2, calling example:

  1. header("Content-type: image/png");
  2. $im = imagecreatefromjpeg("test.jpg");
  3. imagemask($im, 57, 22, 103, 40 , 8);
  4. imagepng($im);
  5. imagedestroy($im);
  6. ?>
Copy code


Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn