1 Востаннє редагувалося Адріян Ігорович (06.01.2013 22:29:33)

Тема: Розрізання зображення на рівні частинки.

Привіт.
Виникла потреба написати скрипт на php, який би розрізав зображення на рівні квадратики 10x10 px.
Я з графікою на php дуже не працював, тому прошу у вас допомоги.
Є думки про використання

 imagecopyresized()

але можливо є більш кращі методи ?

2

Re: Розрізання зображення на рівні частинки.

<?php

// Cтворюємо зображення на основі URL
$src = imagecreatefromjpeg('http://cdn.walkpm.com/-/uploads/0/dc/ebf4e4bc2fc1b4858a722baa74bcfdc0/photos/small-new-year-dnipropetrovsk-1323784937.jpg');
$stack = array();
//Вирізаємо квадратики розміром 10 на 10 із зображення розміром 100 на 100
for($x = 0; $x < 100;){
    for($y = 0; $y < 100;){
        $kvadratyk = imagecreatetruecolor(10, 10);
        // Вирізаємо один квадратик
        imagecopy($kvadratyk, $src, 0, 0, $x, $y, 10, 10);
        $stack[] = $kvadratyk;
        $y += 10;
    }
    $x += 10;
}

//Наносимо квадратики на пусте зображення розміром 200 на 200
$canvas = imagecreatetruecolor(200, 200); $i = 0;
for($dx = 0; $dx < 200;){
    for($dy = 0; $dy < 200;){        
        $kvadratyk = imagecreatetruecolor(10, 10);
        //Наносимо 1 квадратик
        imagecopy($canvas, $stack[$i], $dx, $dy, 0, 0, 10, 10);
        $dy += 20;
        $i++;
    }
    $dx += 20;
}
// Вивід 
header('Content-Type: image/jpeg');
imagejpeg($canvas);
?>
Щоб зрозуміти рекурсію потрібно спочатку зрозуміти рекурсію.
int fac(int n) { return n < 2 ? 1 : n*fac(n-1); }
Подякували: Адріян Ігорович1

Re: Розрізання зображення на рівні частинки.

Patron, чи немогли б ви допиляти скрипт, щоб він не виводив картинку у браузер, а кожне зображення 10х10 зберігав у якійсь директорії ?

Re: Розрізання зображення на рівні частинки.

P.S: вже розібрався. Виявляється сама функція imagejpeg має можливість виведення у файл.

5

Re: Розрізання зображення на рівні частинки.

я не встиг викласти код як ви вже розібралися))

Щоб зрозуміти рекурсію потрібно спочатку зрозуміти рекурсію.
int fac(int n) { return n < 2 ? 1 : n*fac(n-1); }

Re: Розрізання зображення на рівні частинки.

Patron написав:

я не встиг викласти код як ви вже розібралися))

В мене таке буває, доки не запитаю - нічого не  виходить, але от тільки но задам питання і проблема ніби вирішується сама собою.

Подякували: miroslav.chandler1

7

Re: Розрізання зображення на рівні частинки.

Як варіант можна брати картинку і різати її css прямо в браузері. Так підвищується швидкість завантаження сторінки.

Re: Розрізання зображення на рівні частинки.

Vo_Vik написав:

Як варіант можна брати картинку і різати її css прямо в браузері. Так підвищується швидкість завантаження сторінки.

Так нажаль не підходить.

9

Re: Розрізання зображення на рівні частинки.

Чому?

10

Re: Розрізання зображення на рівні частинки.

Vo_Vik написав:

Чому?

Читайте третє повідомлення теми останніх 4 слова

Щоб зрозуміти рекурсію потрібно спочатку зрозуміти рекурсію.
int fac(int n) { return n < 2 ? 1 : n*fac(n-1); }

11

Re: Розрізання зображення на рівні частинки.

Нє ну звичайно, що згори треба спуститись, якщо вже там. Але з самого початку все ж можливо обійти гору, а не дертись на неї)

12

Re: Розрізання зображення на рівні частинки.

Vo_Vik написав:

Як варіант можна брати картинку і різати її css прямо в браузері. Так підвищується швидкість завантаження сторінки.

тобто загрузка великого зображення і нарізка до маленького - швидше? отнюдь :D

тут треба дивитися з декількох сторін. якщо розмір зображення - константа, тоді розрізати і зберегти. якщо розмір зображення в майбутньому може коливатися, тоді зберегти оригінал і нарізати на потрібні частинки. при зміні розміру повторити попередній пункт. нарізана статика передається на багато швидше ніж вся картинка і нарізання на фронтенді.

pew pew :D
Блоґ

13

Re: Розрізання зображення на рівні частинки.

На фронт енді воно не "нарізається" просто css slice робляться, там затрати ресурсу значно менші будуть. Плюс час загрузки однієї великої картинки значно менше ніж 20 маленьких. Принаймі гугл рекомендує робити так для всіх малих елементів дизайну.

14

Re: Розрізання зображення на рівні частинки.

Vo_Vik написав:

На фронт енді воно не "нарізається" просто css slice робляться, там затрати ресурсу значно менші будуть. Плюс час загрузки однієї великої картинки значно менше ніж 20 маленьких. Принаймі гугл рекомендує робити так для всіх малих елементів дизайну.

я мав на увазі, якщо картинка дуже велика)

pew pew :D
Блоґ

15

Re: Розрізання зображення на рівні частинки.

закриваю тему так як вважаю її вичерпаною

Щоб зрозуміти рекурсію потрібно спочатку зрозуміти рекурсію.
int fac(int n) { return n < 2 ? 1 : n*fac(n-1); }