Php 在现有图像上绘制带有每个单元格坐标的网格

Php 在现有图像上绘制带有每个单元格坐标的网格,php,Php,我试图创建一个函数,它接受一个JPG文件,添加一个网格覆盖,然后在每个单元格中写入文本A1、A2、A3等等 当前代码(如下)仅绘制静态列/行大小的网格 问题1)如何在每个单元格中添加坐标作为文本?例如,行是字母,列是数字。第一排是A1,A2,A3。。。下一行是B1,B2,B3 问题2)如何修改它,以便指定所需的行数和列数,并根据输入图像的尺寸自动调整列/列的大小 function draw_grid(&$img, $x0, $y0, $width, $height, $cols, $ro

我试图创建一个函数,它接受一个JPG文件,添加一个网格覆盖,然后在每个单元格中写入文本A1、A2、A3等等

当前代码(如下)仅绘制静态列/行大小的网格

问题1)如何在每个单元格中添加坐标作为文本?例如,行是字母,列是数字。第一排是A1,A2,A3。。。下一行是B1,B2,B3

问题2)如何修改它,以便指定所需的行数和列数,并根据输入图像的尺寸自动调整列/列的大小

function draw_grid(&$img, $x0, $y0, $width, $height, $cols, $rows, $color) {
    imagesetthickness($img, 5);
    //draw outer border
    imagerectangle($img, $x0, $y0, $x0+$width*$cols, $y0+$height*$rows, $color);
    //first draw horizontal
    $x1 = $x0;
    $x2 = $x0 + $cols*$width;
    for ($n=0; $n<ceil($rows/2); $n++) {
        $y1 = $y0 + 2*$n*$height;
        $y2 = $y0 + (2*$n+1)*$height;
        imagerectangle($img, $x1,$y1,$x2,$y2, $color);
    }
    //then draw vertical
    $y1 = $y0;
    $y2 = $y0 + $rows*$height;
    for ($n=0; $n<ceil($cols/2); $n++) {
        $x1 = $x0 + 2*$n*$width;
        $x2 = $x0 + (2*$n+1)*$width;
        imagerectangle($img, $x1,$y1,$x2,$y2, $color);
    }
}

$imgpath = "foto/306/306.jpg";
$img = imagecreatefromjpeg($imgpath);
$size = getimagesize($imgpath);
$width = $size[0];
$height = $size[1];

$red   = imagecolorallocate($img, 255,   0,   0);
draw_grid($img, 0,0, $width /10 , $height /10 ,20,10,$red);

header("Content-type: image/jpg");
imagejpeg($img);
imagedestroy($img);
函数绘制网格(&$img、$x0、$y0、$width、$height、$cols、$rows、$color){
imagesetthickness($img,5);
//画外边框
图像矩形($img,$x0,$y0,$x0+$width*$cols,$y0+$height*$rows,$color);
//先画水平线
$x1=$x0;
$x2=$x0+$cols*$width;
对于($n=0;$n1),请查看和函数。其中一个函数应该可以满足您的需要


2) 将输入图像的宽度和高度分别除以要将其划分为的列数和行数,以获得每个单元格的宽度和高度。

如我的评论所述,您当前的代码仅绘制轮廓。这对于绘制网格很好,但如果您希望向单元格添加一些文本,则必须aw每个矩形手册,并使用这些坐标放置文本


使用,您可以计算文本的宽度/高度,您需要这些信息将文本“居中”到单元格中


关于第二个问题,将图片的总宽度除以所需的单元格数,这样就可以知道每个单元格的大小


我已经更新了您的代码,以显示计算x/y坐标的总体思路


谢谢回复。我知道imagettftext()幸运的是,我不知道如何在正确的单元中间找到正确的文本。幸运的是,我认为没有一种简单的方法可以得到投影文本的像素宽度。你可能需要通过反复试验来确定它。一旦你得到了单元格的宽度,把它分成两半,减去你估计的一半。文本像素宽度。这将为您提供文本相对于当前单元格X坐标的偏移量。您只绘制了绘制网格所需的列/行,但是,将文本放置到这些字段中会非常困难。请尝试绘制每个矩形,并将文本放置在其中。另一种方法是使用老式html
构建网格(单元格使用
),并将图像定义为表格背景。这样,您可以轻松地将文本添加到每个单元格中,并按照您想要的方式对其进行格式化。这比使用
imagettftext()容易得多
rendering function这正是我想要的!!!我可以自己做其余的调整。非常感谢!很乐意帮助!只是注意到底线不可见。我没有考虑线的厚度,你应该从总x/y中减去线的厚度!没问题,细节不重要就我而言,我已经使用PHP 10年了(用于业余项目),也不知道$var++在字符串上是可行的:P我唯一不确定的是字体大小,可能应该根据图像大小来计算。我想我会想出来的。PHP总是让你惊讶,即使10年之后;)。你可以阅读更多关于
string++
。你应该小心使用,
$n='z';$n++;echo$n
会显示出来
aa
;)