php - 您将如何通过 PHP 创建由点组成的文本图像?
问题描述
我知道 PHP 的 GD 库用于处理图像,并且它具有可用于创建包含文本的图像的方法,例如imagettftext()
. 这用于验证码之类的东西。
但是,我遇到了下面的示例,其中创建了一个图像,大概是使用 GD,仅使用点,但是将它们排列成在图像中显示的文本形状的密度更高。
我想学习如何利用这种技术,但无法拼凑出如何做到这一点。我想背景都是随机的点,但是,我似乎无法理解如何将点分组为指定字体的字符形状。
解决方案
- 只需创建一个黑色图像,放上字体。
- 做一个循环放置随机黑点。
- 运行另一个循环并为噪声放置白点。
header('Content-Type: image/png');
putenv('GDFONTPATH=' . realpath('.'));
$im = imagecreatetruecolor(400, 200);
$black = imagecolorallocate($im, 0, 0, 0);
$white = imagecolorallocate($im, 255, 255, 255);
imagefttext($im, 120.0, -20.0, 200, 120, $white, 'arialblack', '4');
for ($i = 0; $i < 1e5; $i++) {
imagesetpixel($im, rand(0, 400), rand(0, 200), $black);
}
for ($i = 0; $i < 2e3; $i++) {
imagesetpixel($im, rand(0, 400), rand(0, 200), $white);
}
imagepng($im);
imagedestroy($im);
结果看起来像这样
您可以通过使用更多的黑点或使用较浅的字体(可能是轮廓字体)来使效果更加困难。
您可以通过使用图像噪声图并将它们混合在一起来提高性能。
推荐阅读
- ios - 具有数字和可比较协议的 Swift 泛型类
- java - 没有无参数构造函数的超类
- javascript - 根据条件调用另一个组件中的函数,无论选项卡是否处于活动状态
- python - 如何同时从多个其他文件编辑和访问一个文件中的变量?
- c++ - Am I missing something or are Virtual calls not as bad performance as people make of them
- python - 无法使用 cx_freeze 和 PySide2 进行编译
- pyspark - 在 pyspark 的 collect_list 中包含空值
- caching - 为什么 L2 缓存利用率低,即使在 cuda 中 L2 缓存命中率约为 93%?
- botframework - ShowTypingMiddleware 在部署时破坏了我的机器人 - BotFramework V4
- excel - 如何使用 VBA 登录网站并将数据检索到 Excel?