PHP: Как разделить blob-картинку на девять частей?

#php #image-scaling

#php #масштабирование изображения

Вопрос:

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

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

Спасибо за помощь 😉

Комментарии:

1. это большая работа. верить в

2. Я думаю, что да, но я был бы рад, если бы вы могли указать мне несколько углов, точек и тому подобное

3. это не так уж много работы. с моим решением это можно решить за ~ 20 строк кода. но я не могу сейчас привести пример, поскольку у меня есть своя работа.

4. Мне нравится, что у вас есть время дать простой ответ, а также проверить наличие комментариев, но 20 ~ строк будут отвлекать 🙂

5. Я не совсем понимаю вторую часть вашего комментария [вы знаете, что не являетесь носителем языка]: «но 20 ~ строк будут отвлекать» — не могли бы вы, пожалуйста, объяснить это для меня?

Ответ №1:

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

Комментарии:

1. это не работает с ресурсом загруженного файла, например, если я получил файл, загруженный в $ _FILES [‘filename’][‘tmp_name’] — или работает?

2. Почему бы и нет? Если изображение было загружено правильно, это решение сработает как по волшебству — вы должны только не забыть указать правильный путь к временному каталогу. Даже если у вас с этим проблемы, что мешает вам переместить_uploaded_file() в нужное место и затем обработать с помощью вашего кода?

Ответ №2:

Хорошо, это будет комбинация 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 x 66.6
  • 1.2 = 0 x 133.33
  • 1.3 = 0 x 196.66
  • 2.1 = 66.6 x 66.6
  • 2.2 = 66.6 x 133.33
  • 2.3 = 66.6 x 196.66

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

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

уродливая мозаика