Jump to content

Задание для новичков(php)


Recommended Posts

www.google.ru
Хочешь сказать, существует способ безошибочно отфильтровывать весь мат в любом его написани, включая безграмотный и с заменой букв на всякий похожий юникод?
Link to comment
Share on other sites

  • Replies 65
  • Created
  • Last Reply

Top Posters In This Topic

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

Какой идиот полезет в таблицу символов за юникодом?

Link to comment
Share on other sites

о, 2.718281828459045бать :)) А почему не 3.1415дераст? Хотя, вся равно с ошибкой, нужно число Пе.

Так что нифига не для новичков задача.

Edited by Int
Link to comment
Share on other sites

есть решение для задания 4 но оно работает только для картинок малого размера

<?php
$src=imagecreatefromjpeg("1.jpg");
$w=imagesx($src);
$h=imagesy($src);
for($i=0;$i<$h;$i++){
for($b=0;$b<$w;$b++){
$new=imagecreatetruecolor(1,1);
imagecopy($new,$src,0,0,$i,$b,1,1);
imagejpeg($new,"./pixel/".$i.$b.".jpg");
imagedestroy($new);
echo "<div style='position: fixed; top:".$i."px; left:".$b."px;'><img src='./pixel/".$i.$b.'.jpg"></div>";
}
}
?>

Edited by belovres
Link to comment
Share on other sites

Что тема сдохла так сказать?

Немного улучшил код для четвертого задания теперь картинки размером 64х64 выводятся за 2:15 мин но все равно если катинка больше 80х80 ком польностью сдыхает и это на моих четырёх ядрах

Link to comment
Share on other sites

Такой вот вариант:

<?php
$foto = "sml.jpg";
$sz = getimagesize($foto);
if ($sz === false) die ('Не тот файл');

$img = imagecreatefromjpeg($foto) or die ('Не открывается');

for($i=0;$i<$sz[0];$i++){
for($j=0;$j<$sz[1];$j++){
$px = imagecolorat ($img,$i,$j);
$rgb = imagecolorsforindex ($img, $px);
$r = $rgb[red]; $g = $rgb[green]; $b = $rgb[blue];

echo "<div style='position: absolute; top:".$j."px; left:".$i."px; background-color: RGB(".$r.",".$g.",".$b."); width: 1px; height: 1px '></div>";
}
}
?>

Картинка 300х200 грузится несколько секунд (на Денвере)

Link to comment
Share on other sites

Слегка оптимизированный вариант (одинаковые пиксели в строке объединяются в один div):

<?php
$foto = "img.jpg";
$sz = getimagesize($foto);
if ($sz === false) die ('Не тот файл');

$img = imagecreatefromjpeg($foto) or die ('Не открывается');

for($i=0;$i<$sz[1];$i++){
$j=0;$div=0;
while ($j<$sz[0]){
$px = imagecolorat ($img,$j,$i);
$n = $j+1;
$pxn = imagecolorat($img,$n,$i);
$div++;
$lft=$n-$div;
if ($px != $pxn)
{
$rgb = imagecolorsforindex ($img, $px);
$r = $rgb[red]; $g = $rgb[green]; $b = $rgb[blue];
echo "<div style='position: absolute; top:".$i."px; left:".$lft."px; background-color: RGB(".$r.",".$g.",".$b."); width:".$div."; height: 1px '></div>";
$div=0;
}
$j++;
}
}
?>

Рабаотает чуть быстрее, но на больших изображениях браузер все равно зависает...

Edited by dyadya
Link to comment
Share on other sites

и это на моих четырёх ядрах
Вроде бы php не умеет выполняться в несколько потоков, так что будь хоть двадцать ядер, роли это не сыграет, важна скорость одного ядра.

Ну раз вам нужны задания, то давайте и я одно придумаю:

Дан некий файл (в общем случае бинарный), нужно, интерпретируя его как последовательность однобайтовых значений (ord() от символов), сгенерировать однотонную картинку, в которой одна точка кодировалась бы одним символом файла.

Ширину картинки возьмём 60 пикселей, высоту... ну пускай 37, по золотому сечению. Если символов в файле больше, чем 60x37, то они не учитываются, если меньше, вывести сообщение об ошибке.

Edited by Int
Link to comment
Share on other sites

Дан некий файл (в общем случае бинарный), нужно, интерпретируя его как последовательность однобайтовых значений (ord() от символов), сгенерировать однотонную картинку, в которой одна точка кодировалась бы одним символом файла.

Ширину картинки возьмём 60 пикселей, высоту... ну пускай 37, по золотому сечению. Если символов в файле больше, чем 60x37, то они не учитываются, если меньше, вывести сообщение об ошибке.

для новичков говоришь?! )

Link to comment
Share on other sites

Дан некий файл (в общем случае бинарный), нужно, интерпретируя его как последовательность однобайтовых значений (ord() от символов), сгенерировать однотонную картинку, в которой одна точка кодировалась бы одним символом файла.

Ширину картинки возьмём 60 пикселей, высоту... ну пускай 37, по золотому сечению. Если символов в файле больше, чем 60x37, то они не учитываются, если меньше, вывести сообщение об ошибке.

А теперь переведи на русский!

Link to comment
Share on other sites

Ой, ну куда уж понятнее.

1) Есть файл с произвольным набором символов, воспринимаем их не как символы, а как их ANSI-код (от 0 до 255)

2) Есть пустая картинка 60x37

3) Заполняем эту картинку пикселями, где каждый пиксель задан символом из вышеозначенного файла. Для простоты картинка однотонная, то есть, условно, красная от 0.0.0 до 255.0.0 (в RGB), или серая от 0.0.0 до 255.255.255, всего 256 градаций цвета.

3.1) Если символов слишком много, отбрасываем лишние.

3.2) Если символов слишком мало, выходим из программы с сообщением об ошибке.

4) выводим картинку в файл (imagejpg)

Задача по уровню такая же, как и предыдущая про картинки, даже чуть попроще. Не вижу никаких принципиально сложных моментов. Ну разве что сделать 256 раз imagecolorallocate, но надеюсь, что новички додумаются использовать цикл и массив.

Edited by Int
Link to comment
Share on other sites

Файл абсолютно любой, вон хоть php.ini возьми. Картинка не обязательно будет красивой.

Если будет такое желание, введём второй пункт задания повышенной сложности:

2) Разбить первые две строки картинки на блоки 2x2, все 4 пикселя каждого из блоков заменить на среднее арифметическое от всех четырёх пикселей. Затем сдвинуть эту "цепочку из окон" вправо на единицу и провести ту же операцию.

Повторить для всех строк, "перешагивая" через одну (то есть, сперва для 1 и 2 строк, затем 3 и 4, далее 5 и 6), а затем аналогично, но со сдвигом (2 и 3, 4 и 5, 6 и 7)

Иллюстрация:

было:

1 строка: [1 1] [7 2]

2 строка: [3 4] [5 6]

Шаг 1, ищем среднее значение:

(1+1+3+4)/4 = 2

(7+2+5+6)/4 = 5

результат:

[2 2] [5 5]

[2 2] [5 5]

Шаг 2: сдвигаемся вправо (звёздочки добавил для понятности, что там могуть быть ещё числа):

[* 2] [2 5] [2 *]

[* 2] [2 5] [2 *]

Ищем среднее:

(2+5+2+5)/4=3

Результат:

2] [3 3] [2

2] [3 3] [2

Шаг 3: всё это делаем для каждого блока в строке

Шаг 4: сдвигаемся на одну строку вниз и повторяем 1-3.

В итоге получили "смазанную "картинку :blink: В теории...

Это заданиче исключительно на математику и работу с массивами и циклами.

Давайте я сейчас ради развелечения реализую первую часть, натравлю на свой php.ini и результат приложу сюда. Буду делать оттенками серого. Самому интересно что выйдет.

Вот, готово:

http://www.rapidshare.ru/1042828

Размер побольше и другой файл:

http://www.rapidshare.ru/1042825

У меня вышло 18 строк, но если убрать комментарии и переносы строк в нескольких местах, можно сделать 11.

//А потом можно попробовать обратно преобразовать из bmp в текст

Edited by Int
Link to comment
Share on other sites

Эх, руки зачесались написать шифровальщик, который бы любой текст превращал в картинку.. А что, это реально! Ребята. кто сможет реализовать получить что нибудь хорошее)

Link to comment
Share on other sites

Ну я примерно это и сделал :blink: Только шифрует не особо криптостойко, и размер файла увеличивается в три раза (можно, правда, gif с 256 цветами или брать сразу три байта для трёх компонент). Для повышения криптостойкости можно картинку на 90 градусов повернуть, потом строки местами поменять, да ещё не просто местами, а по хитрому алгоритму. Но это будет работать до тех пор, пока кто-то не вскроет алгоритм, сразу все файлы расшифруются. Нужно где-то добавить ввод пароля.

И вообще, это офтопик.

Чё-то никто не хочет задачу решить :D У меня 10 минут ушло. Потом, правда, ошибку искал ещё минут 5 :D Но нашёл.

Edited by Int
Link to comment
Share on other sites

 Share


×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue. See more about our Guidelines and Privacy Policy