Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Вырезка цифр из массива квадратом?

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Без описания
mega94
Отправлено: 21 Мая, 2015 - 22:45:38
Post Id



Новичок


Покинул форум
Сообщений всего: 53
Дата рег-ции: Сент. 2014  


Помог: 0 раз(а)

[+][+]


Всем привет, питаюсь ломать простую каптчу на данный момент читал капчу по циклам такая вот матрица:
PHP:
скопировать код в буфер обмена
  1. (
  2.     [0] => 00000011110000011110000000011000011110000000
  3.     [1] => 00000110011000110011000000111000110011000000
  4.     [2] => 00001100001001100001100001111001100001000000
  5.     [3] => 00001100000001100001100011011001100000000000
  6.     [4] => 00001101110000110011100110011001101110000000
  7.     [5] => 00001110011000011101101100011001110011000000
  8.     [6] => 00001100001100000001101111111101100001100000
  9.     [7] => 00001100001100100001100000011001100001100000
  10.     [8] => 00000110011000110011000000011000110011000000
  11.     [9] => 00000011110000011110000000011000011110000000
  12. )
и как из этого вырезать цифры квадратом? (картинка размером 50x20 первая цифра появляется внутри 3 до 20 пикселей ширине)
 
 Top
DeepVarvar Супермодератор
Отправлено: 22 Мая, 2015 - 02:33:50
Post Id



Активный участник


Покинул форум
Сообщений всего: 10377
Дата рег-ции: Дек. 2008  
Откуда: Альфа Центавра


Помог: 353 раз(а)




Ищи границы где по вертикали одни нули, по ним и отсекай.
 
 Top
mega94
Отправлено: 22 Мая, 2015 - 07:42:50
Post Id



Новичок


Покинул форум
Сообщений всего: 53
Дата рег-ции: Сент. 2014  


Помог: 0 раз(а)

[+][+]


DeepVarvar пишет:
Ищи границы где по вертикали одни нули, по ним и отсекай.
как искать? какие функции на помощь?
 
 Top
Ch_chov
Отправлено: 22 Мая, 2015 - 09:08:23
Post Id



Постоянный участник


Покинул форум
Сообщений всего: 2121
Дата рег-ции: Июль 2008  
Откуда: из города


Помог: 90 раз(а)




Если транспонировать массив, то можно обойтись без циклов.

PHP:
скопировать код в буфер обмена
  1. <?PHP
  2.  
  3. // Исходные данные.
  4. $data1 = [
  5.   '00000011110000011110000000011000011110000000',
  6.   '00000110011000110011000000111000110011000000',
  7.   '00001100001001100001100001111001100001000000',
  8.   '00001100000001100001100011011001100000000000',
  9.   '00001101110000110011100110011001101110000000',
  10.   '00001110011000011101101100011001110011000000',
  11.   '00001100001100000001101111111101100001100000',
  12.   '00001100001100100001100000011001100001100000',
  13.   '00000110011000110011000000011000110011000000',
  14.   '00000011110000011110000000011000011110000000',
  15. ];
  16.  
  17. // @see http://stackoverflow.com/a/3423692/272927
  18.  function transpose($array) {
  19.   array_unshift($array, null);
  20.   return call_user_func_array('array_map', $array);
  21. }
  22.  
  23. // Преобразуем данные в многомерный массив.
  24. $data2 = array_map('str_split', $data1);
  25.  
  26. // Транспанируем массив.
  27. $data3 = transpose($data2);
  28.  
  29. // Преобразуем многомерный массив в массив строк.
  30. $data4 = array_map('implode', $data3);
  31.  
  32. // Убираем промежутки между цифрами.
  33. $data5 = array_filter($data4, 'decbin');
  34.  
  35. // Разбиваем на квадраты.
  36. $data6 = array_chunk($data5, 8);
  37.  
  38. // Вычисляем хэш каждого квадрата.
  39. $data7 = array_map('md5', array_map('implode', $data6));
  40.  
  41. // Заменяем хэши на их значения.
  42. $data8 = array_map(function ($hash) {
  43.   $hashes = [
  44.     '269fad4e6208496a3329ed02a54979fd' => 4,
  45.     'f912f18869b5b632799e167e8851368b' => 6,
  46.     'f5913361edcf4d5d10f89465832f25fe' => 9,
  47.   ];
  48.   return $hashes[$hash];
  49. }, $data7);
  50.  
  51. // Выводим результат.
  52. echo implode($data8), "\n"; // 6946
  53.  
 
 Top
mega94
Отправлено: 22 Мая, 2015 - 09:28:57
Post Id



Новичок


Покинул форум
Сообщений всего: 53
Дата рег-ции: Сент. 2014  


Помог: 0 раз(а)

[+][+]


Ch_chov пишет:
Если транспонировать массив, то можно обойтись без циклов.

PHP:
скопировать код в буфер обмена
  1. <?PHP
  2.  
  3. // Исходные данные.
  4. $data1 = [
  5.   '00000011110000011110000000011000011110000000',
  6.   '00000110011000110011000000111000110011000000',
  7.   '00001100001001100001100001111001100001000000',
  8.   '00001100000001100001100011011001100000000000',
  9.   '00001101110000110011100110011001101110000000',
  10.   '00001110011000011101101100011001110011000000',
  11.   '00001100001100000001101111111101100001100000',
  12.   '00001100001100100001100000011001100001100000',
  13.   '00000110011000110011000000011000110011000000',
  14.   '00000011110000011110000000011000011110000000',
  15. ];
  16.  
  17. // @see http://stackoverflow.com/a/3423692/272927
  18.  function transpose($array) {
  19.   array_unshift($array, null);
  20.   return call_user_func_array('array_map', $array);
  21. }
  22.  
  23. // Преобразуем данные в многомерный массив.
  24. $data2 = array_map('str_split', $data1);
  25.  
  26. // Транспанируем массив.
  27. $data3 = transpose($data2);
  28.  
  29. // Преобразуем многомерный массив в массив строк.
  30. $data4 = array_map('implode', $data3);
  31.  
  32. // Убираем промежутки между цифрами.
  33. $data5 = array_filter($data4, 'decbin');
  34.  
  35. // Разбиваем на квадраты.
  36. $data6 = array_chunk($data5, 8);
  37.  
  38. // Вычисляем хэш каждого квадрата.
  39. $data7 = array_map('md5', array_map('implode', $data6));
  40.  
  41. // Заменяем хэши на их значения.
  42. $data8 = array_map(function ($hash) {
  43.   $hashes = [
  44.     '269fad4e6208496a3329ed02a54979fd' => 4,
  45.     'f912f18869b5b632799e167e8851368b' => 6,
  46.     'f5913361edcf4d5d10f89465832f25fe' => 9,
  47.   ];
  48.   return $hashes[$hash];
  49. }, $data7);
  50.  
  51. // Выводим результат.
  52. echo implode($data8), "\n"; // 6946
  53.  


интересный хороший подход, но сначала ругает на
PHP:
скопировать код в буфер обмена
  1. Parse error: syntax error, unexpected '[' in Z:\home\captcha.ru\www\index.php on line 4
и
PHP:
скопировать код в буфер обмена
  1. Parse error: syntax error, unexpected '[' in Z:\home\captcha.ru\www\index.php on line 43

так я кавычки добавил, потом вообще
PHP:
скопировать код в буфер обмена
  1.  
  2. Warning: array_map() [function.array-map]: Argument #2 should be an array in Z:\home\captcha.ru\www\index.php on line 24
  3.  
  4. Warning: array_unshift() expects parameter 1 to be array, null given in Z:\home\captcha.ru\www\index.php on line 19
  5.  
  6. Warning: call_user_func_array() expects parameter 2 to be array, null given in Z:\home\captcha.ru\www\index.php on line 20
  7.  
  8. Warning: array_map() [function.array-map]: Argument #2 should be an array in Z:\home\captcha.ru\www\index.php on line 30
  9.  
  10. Warning: array_filter() expects parameter 1 to be array, null given in Z:\home\captcha.ru\www\index.php on line 33
  11.  
  12. Warning: array_chunk() expects parameter 1 to be array, null given in Z:\home\captcha.ru\www\index.php on line 36
  13.  
  14. Warning: array_map() [function.array-map]: Argument #2 should be an array in Z:\home\captcha.ru\www\index.php on line 39
  15.  
  16. Warning: array_map() [function.array-map]: Argument #2 should be an array in Z:\home\captcha.ru\www\index.php on line 39
  17.  
  18. Warning: array_map() [function.array-map]: Argument #2 should be an array in Z:\home\captcha.ru\www\index.php on line 49
  19.  
  20. Warning: implode() [function.implode]: Argument must be an array in Z:\home\captcha.ru\www\index.php on line 52
 
 Top
Ch_chov
Отправлено: 22 Мая, 2015 - 09:41:44
Post Id



Постоянный участник


Покинул форум
Сообщений всего: 2121
Дата рег-ции: Июль 2008  
Откуда: из города


Помог: 90 раз(а)




Потому что PHP пора обновить. Вот пример для PHP 5.3
http://sandbox.onlinephpfunctions.com/code/3334f24ac1e51b0533ef49f6eacaeeffeb802c61

(Отредактировано автором: 22 Мая, 2015 - 09:43:52)

 
 Top
mega94
Отправлено: 22 Мая, 2015 - 09:48:46
Post Id



Новичок


Покинул форум
Сообщений всего: 53
Дата рег-ции: Сент. 2014  


Помог: 0 раз(а)

[+][+]


Ch_chov пишет:
Потому что PHP пора обновить. Вот пример для PHP 5.3
http://sandbox.onlinephpfunctions.com/code/3334f24ac1e51b0533ef49f6eacaeeffeb802c61

у меня PHP Version 5.3.13 стоит на примере что вы мне дали, работает на PHP 5.4
спасибо работает Укатываюсь

(Отредактировано автором: 22 Мая, 2015 - 10:19:58)

 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Вопросы новичков »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB