PHP图像处理,imagefill 疑问?

发布于 2022-09-06 05:41:22 字数 561 浏览 22 评论 0

代码如下:

<?php
$im = imagecreatetruecolor ( 100, 100 ); // 创建100*100大小的画布
$red = imagecolorallocate ( $im, 255, 0, 0 ); // 设置一个颜色变量为红色

imagefill ( $im, 50, 50, $red ); // 将背景设为红色
//imagefill ( $im, 0, 0, $red ); // 将背景设为红色

header ( 'Content-type: image/png' ); // 通知浏览器这不是文本而是一个图片
imagepng ( $im ); // 生成PNG格式的图片输出给浏览器

imagedestroy ( $im );                                    //销毁图像资源,释放画布占用的内存空间

问题:为什么 imagefill ( $im, 50, 50, $red );imagefill ( $im, 0, 0, $red );都是从 0,0 开始,50,50 不起作用?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

满意归宿 2022-09-13 05:41:22

这个很好理解,你看下画图程序里面的染色桶,
clipboard.png
只要是一块画布,他是不是可以在某个区域任意一点对画布上该区域进行色彩填充

这个imagefill 和你那个差不多,都是任意一点“点一下”就会对整个区域进行色彩填充,所以点击50,50和0,0效果一样

你要想从50,50开始填充,应当再建立一块画布,上色,然后从50,50开始复制到原画布上,imagecopymerge

这样的小城市 2022-09-13 05:41:22

这个是你没有详细阅读定义

clipboard.png
这里写了imagefill填充是从image图像的左上角0,0开始用颜色把与x,y颜色相同相邻的点全部填充。回到这个问题,你的$im应该是个白色的,左上角0,0与x(50),y(50)的颜色是相同的 所以会从左上角开始充满,然后相邻的都是同色,所以结果就是全部变成了红色

ぽ尐不点ル 2022-09-13 05:41:22

谢谢回答,译意我明白了,但实际操作时会出现 BUG,不知道是浏览器兼容问题还是 PHP版本问题!

AA.JPG

图片描述

每个色块大小是 50px*50px


<?php
$im = imagecreatefromjpeg("AA.jpg");
$blue = imagecolorallocate ( $im, 0, 0, 255 ); // 设置一个颜色变量为红色

imagefill ( $im, 30, 80, $blue ); // 将背景设为红色
//imagefill ( $im, 0, 0, $blue ); // 将背景设为红色

header ( 'Content-type: image/jpg' ); // 通知浏览器这不是文本而是一个图片
imagepng( $im ); // 生成PNG格式的图片输出给浏览器

imagedestroy ( $im ); //销毁图像资源,释放画布占用的内存空间
?>


输出图片是这样的

图片描述

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文