【问题标题】:PHP divide rectangle (image) into grid?PHP将矩形(图像)划分为网格?
【发布时间】:2021-04-05 06:48:28
【问题描述】:

编辑:

有没有办法将像素化元素混在一起?如果我有一个网格,可以说 100x100 - 那么像素会变得非常小,您可以看到图像。所以我想把像素化的部分弄乱。有什么想法吗?


我正在尝试使用 PHP 将图像划分为相等的网格,以便将其像素化为均匀的部分。

这与某种游戏有关。某个用户上传了一张图片,我希望将它分成 x 个块(用户选择应该有多少块),然后每个块都会被像素化。当其他用户完成某些任务时 - 像素化块的一部分被显示出来,直到所有像素化部分都消失并且您留下原始图像。我真的不在乎网格元素是正方形还是矩形 - 我只是希望它们是均匀的。

作为我的起点,我正在使用这个问题的答案PHP image pixelate?

要确定 x 和 y 像素大小,我使用以下公式:

$gridElements = 9;
$pixelate_x = $width/sqrt($gridElements);
$pixelate_y = $height/sqrt($gridElements);

我注意到,当使用平方根为整数的数字时,我会得到一个更均匀的网格。但它并不完美。

当尝试使用 9 块网格并使用 1160x680 图像时,我得到以下信息:

它可能看起来很均匀,但最后一行比前 2 行大。

当我将其缩放到 16 时,差异非常明显

当尝试 400 个元素的网格 (20x20) 时,会出现第 21 行。

所以 .. 它工作得不是很好,我确实希望网格是均匀的。有谁知道如何做到这一点?

【问题讨论】:

  • 看起来实际上是第 20 行,而不是第 21 行?
  • 您必须检查 image_height / number_of_vertical_blocks 是否为 integer,这对于 4x4 或 20x20 应该没有问题...您确定您的 image_height = 680?
  • 是的,对不起,我在计算另一次尝试。是的,第 20 行被剪掉了:/ 是的,图像高度是 680,您可以复制图像 URL 并在新标签中打开它。

标签: php image


【解决方案1】:

这是因为 1160 并不能很好地划分自身,即使是 3(是的,使用 3x3 网格时也不相等)。你最大的敌人是整数

【讨论】:

  • 好吧,我尝试使用平方根等于整数的宽度和高度,所以我的新图像尺寸为 1156 x 676,但我仍然遇到相同的截断问题
  • 试试这个:pastie.org/6371547 它首先调整图像大小,然后使用整数像素化对其进行迭代。注释掉了一些行,在我看来你甚至可以从那里删掉很多代码;)
猜你喜欢
  • 2019-08-12
  • 1970-01-01
  • 2015-05-12
  • 2020-06-20
  • 1970-01-01
  • 2014-05-09
  • 1970-01-01
  • 2016-06-30
  • 2019-08-08
相关资源
最近更新 更多