[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Правильная порезка изображения
RCuPeR
Всем привет. Имеются следующие проблемы с использованием библиотеки GD2.

Допустим, есть изображение размером 120px, нужно её разрезать на 6 ровных частей по 20px.

Как это сделать?!



Спустя 1 час, 25 минут, 38 секунд (1.07.2011 - 18:51) waldicom написал(а):
Если вопрос "какой функцией", то imagecopy*
Если какой алгоритм, то получаем общую длину, дели на количество кусков и в цикле режем.

Т.е. вроде как все понятно. Может что-то другое имелось ввиду?

Спустя 18 часов, 30 секунд (2.07.2011 - 12:51) RCuPeR написал(а):
Блин, у этой imagecopy() синтаксис такой непонятный %)

<?php

$img = 'http://phpforum.ru/style_images/1/logo.jpg';

$img_width = getimagesize($img);

$detail = round($img_width[0] / 6, 1);



Так, мы имеем исходное изображение $img шириной 487px.
Дальше мы делим ширину нашего изображения на нужно число, у нас это 6. Получаем эту длину в переменную $detail = 81.2px.

Дальше я в цикле режу нашу исходную картинку:



for($i = 0; $i <= 6; $i++)
imagecopy('Как тут дальше - я не знаю :(');

Спустя 26 минут, 16 секунд (2.07.2011 - 13:18) Invis1ble написал(а):
RCuPeR
RTFM

Спустя 9 минут, 30 секунд (2.07.2011 - 13:27) RCuPeR написал(а):
Я догадался заглянуть на php.net. Но! Теория это хорошо, но много чего непонятно, если можно, покажите кто-то на примере...

Спустя 10 минут, 26 секунд (2.07.2011 - 13:38) waldicom написал(а):
Сначала исправлюсь: делить надо конечно не на количество частей, а на длину отрезка.
Затем нужны еще входные данные. Что насчет высоты? Что должно происходить с вырезанными частями?

Спустя 14 минут, 32 секунды (2.07.2011 - 13:52) RCuPeR написал(а):
user posted image

Вот исходное изображение. Из него нужно получить 5 ровных частей:
1 - 6;
2 - 6;
3 - 6;
4 - 3;
5 - 8;

Спустя 4 минуты, 36 секунд (2.07.2011 - 13:57) Invis1ble написал(а):
Пример
$img = 'http://phpforum.ru/style_images/1/logo.jpg';

$data = getimagesize($img);
$func = 'imagecreatefrom' . str_replace('image/', '', $data['mime']);
$dst_im = imagecreatetruecolor(118, 118);
$src_im = $func($img);
imagecopy($dst_im, $src_im, 0, 0, 77, 40, 118, 118);
$func = str_replace('createfrom', '', $func);
header('Content-Type: ' . $data['mime']);
$func($dst_im);

Спустя 1 минута, 30 секунд (2.07.2011 - 13:58) Invis1ble написал(а):
Цитата
Вот исходное изображение

Чувствую, не зря Николай конкурс затеял smile.gif

Спустя 3 минуты, 17 секунд (2.07.2011 - 14:02) RCuPeR написал(а):
Invis1ble, спасибо, в принципе то что нужно.

Спустя 1 час, 26 минут, 12 секунд (2.07.2011 - 15:28) killer8080 написал(а):
если ещё актуально то вот накидал более универсальный вариант
$src_file = 'http://phpforum.ru/style_images/1/logo.jpg';
$dst_file_tpl = 'pic%d%d.jpg';
$partsX = 6;
$partsY = 6;

$dim = getimagesize($src_file);
$func = 'imagecreatefrom' . str_replace('image/', '', $dim['mime']);
function_exists($func) or die('Unsupported image format: '.$dim['mime']);

$norm_width = floor($dim[0] / $partsX);
$norm_height = floor($dim[1] / $partsY);

$last_width = $dim[0] - ($norm_width * ($partsX - 1));
$last_height = $dim[1] - ($norm_height * ($partsY - 1));

$src = $func($src_file);
$count = 0;
for($row = 0; $row < $partsY; $row++){
for($col = 0; $col < $partsX; $col++){
$width = $col < ($partsX - 1) ? $norm_width : $last_width;
$height = $row < ($partsY - 1) ? $norm_height : $last_height;
$dst = imagecreatetruecolor($width, $height);
$dst_file = sprintf($dst_file_tpl, $row, $col);
imagecopy($dst, $src, 0, 0, ($col * $norm_width), ($row * $norm_height), $width, $height);
imagejpeg($dst, $dst_file, 75);
imagedestroy($dst);
$count++;
}
}

echo 'Done!<br />', $count, ' files was created.';

Спустя 41 минута, 59 секунд (2.07.2011 - 16:10) Зарегестрирований написал(а):
Вижу ты затеял бота каптчера писать?
Хаха удачи тебе. laugh.gif


_____________
Гнусный социопат с комплексом Бога.
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.