PHP图像处理,imagefill 疑问?

代码如下:

<?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 不起作用?

阅读 3k
3 个回答

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

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

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

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

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

谢谢回答,译意我明白了,但实际操作时会出现 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 ); //销毁图像资源,释放画布占用的内存空间
?>


输出图片是这样的

图片描述

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题