PHP: Как разбить картинку-блоб на девять частей? - PullRequest
0 голосов
/ 21 мая 2011

У меня сейчас сложный вопрос: в моей базе данных сохранено изображение BLOB-объекта. Теперь я хочу разделить его на 9 частей (например, крестики-нолики), а затем спрятать одну справа внизу. Теперь я хочу отобразить эти 8 частей в случайном порядке, чтобы вы могли переместить их и решить головоломку (перемещение может быть решено с помощью javascript).

Как мне сделать php-функционал? Существуют ли для этого функции?

Спасибо за помощь;)

Ответы [ 2 ]

2 голосов
/ 21 мая 2011

Хорошо, так что это будет комбинация JavaScript и PHP, возможность разделить изображения в PHP не составит труда, но вы должны помнить, что вам нужна организация с файлами, чтобы JavaScript знал порядок их должно быть полной загадкой.

Вместо того, чтобы разбивать само изображение, лучше было бы взять его кусочки математическими методами.

        1     2     3 
     -------------------
   1 |     |     |     |
     -------------------
   2 |     |     |     |
     -------------------
   3 |     |     |     |
     -------------------

Хорошо, поэтому размер изображения 300 x 300 пикселей, вам нужно разделить ширину и высоту на количество изображений, разделенных на 2, например:

$ImagesRequired    = 9;
$GlobalImageWidth  = 900;
$GlobalImageHeight = 900;

$EachImageWidth  = $GlobalImageWidth / ($ImagesRequired / 2);
$EachImageHeight = $GlobalImageHeight / ($ImagesRequired / 2);

Оба значения должны составлять 66 ~ пикселей, после чего вы могли бы перемещаться по изображению, используя фрагменты изображения, используя кадрирование.

for($x=0;$x<=$GlobalImageWidth;$x = $x+=$EachImageWidth)
{
}

Глядя на график выше, вы будете снимать изображения в инкрементном порядке, чтобы накапливать следующие измерения.

  • 1,1 = 0 х 66,6
  • 1,2 = 0 х 133,33
  • 1,3 = 0 х 196,66
  • 2,1 = 66,6 х 66,6
  • 2,2 = 66,6 х 133,33
  • 2,3 = 66,6 х 196,66
  • ...

Итак, теперь вы вычислили размеры, по которым должно быть обрезано каждое изображение, и вы будете использовать библиотеки GD или Imagik для нарезки изображения, создавая массив изображений, который вы затем сможете сохранить в кеше.

Вышесказанное может быть не на 100% правильным, так как здесь поздно, и я не эксперт в математике или манипулировании изображениями, но, надеюсь, это поможет вам начать, а также увидеть отличную работу, проделанную в Imagik и манипулировании изображениями, по следующей ссылке: это должно помочь вдохновить вас.

ugly Mosaic

2 голосов
/ 21 мая 2011

Вы можете использовать библиотеку GD.Существует функция imagecopy() http://www.php.net/manual/en/function.imagecopy.php, в рамках которой вы можете копировать части изображения.Например, если у вас есть изображение 90x90 пикселей, вам нужно будет назвать его с 0,0,30,30, чтобы у вас был первый квадрат.Сохраните эти части как отдельные изображения или поместите непосредственно в браузер, и тогда вам нужно будет только правильно ими управлять [здесь: решатель головоломок].

...