ImageMagic PHP
349 повідомлень
#10 років тому
Здравствуйте. Как увеличить размер прозрачного png изображения, не увеличив саму картинку?Пример:
png изображение размером 300x150
Хотим мы его сделать допустим 480х300, но чтобы сама картинка не изменилась, а осталась в центре, но разрешение изображения в целом изменилось (просто прозрачностью заполнилась по краям.)
834 повідомлення
#10 років тому
1 создать холст нужного размера, прозрачный (посилання) тут есть как сделать2 Высчитать отступ от левого и верхнего краев как то так
$sizeorig = getimagesize ("original.png"

$sizebig = getimagesize ("newbig.png"

$leftspace = ($sizebig - $sizeorig)/2; - это отступ слева
$topspace = ($sizebig - $sizeorig)/2;- это отступ сверху
3 наложить оригинал на холст как водяной знак учитывая отступы которые выщитали в пункте 2 пример функции посилання
или
посилання - тоже еще проще, и вроде с альфа каналом
349 повідомлень
#10 років тому
Спасибо, micros!Сделала так. Догадываюсь, что imagecolorallocatealpha это похоже на костыль...
<?php
$im = ImageCreate (1000, 600) or die ("Ошибка при создании изображения");
$couleur_fond = imagecolorallocatealpha ($im, 0, 0, 0, 127);
$stamp = imagecreatefrompng('logo-min.png');
// Установка полей для штампа и получение размеров штампа
$sizeorig = getimagesize('logo-min.png');
$marge_right = (1000-$sizeorig)/2;
$marge_bottom = (600-$sizeorig)/2;
$sx = imagesx($stamp);
$sy = imagesy($stamp);
// Копирование изображения штампа на фотографию с помощью смещения края
// и ширины фотографии для расчета позиционирования штампа.
imagecopy($im, $stamp, imagesx($im) - $sx - $marge_right, imagesy($im) - $sy - $marge_bottom, 0, 0, imagesx($stamp), imagesy($stamp));
// Вывод и освобождение памяти
header('Content-type: image/png');
imagepng($im);
imagedestroy($im);
?>
834 повідомлення
#10 років тому
Цитата:Догадываюсь, что imagecolorallocatealpha это похоже на костыль...
Главное что бы работало как надо=) Одна строка не костыль в данном случае=) Как по мне=)
349 повідомлень
#10 років тому
Для дальнейшей работы надо чтобы png было 24 битное, а у меня так получилось 8.Подскажите как исправить
834 повідомлення
#10 років тому
Попробуйте
imagealphablending($im, false);
imagesavealpha($im, true);
перед
imagecopy($im, $stamp, imagesx($im) - $sx - $marge_right, imagesy($im) - $sy - $marge_bottom, 0, 0, imagesx($stamp), imagesy($stamp));
349 повідомлень
#10 років тому
<?php
$im = imagecreatetruecolor(1000, 600);
imagealphablending($im, false);
imagesavealpha($im,true);
$transparent = imagecolorallocatealpha ($im, 255, 255, 255, 127);
imagefilledrectangle($im, 0, 0, 1000, 600, $transparent);
// Загрузка штампа и фото, для которого применяется водяной знак
$stamp = imagecreatefrompng('logo-min.png');
// Установка полей для штампа и получение высоты/ширины штампа
$sizeorig = getimagesize('logo-min.png');
$marge_right = (1000-$sizeorig)/2;
$marge_bottom = (600-$sizeorig)/2;
$sx = imagesx($stamp);
$sy = imagesy($stamp);
// Копирование изображения штампа на фотографию с помощью смещения края
// и ширины фотографии для расчета позиционирования штампа.
imagecopy($im, $stamp, imagesx($im) - $sx - $marge_right, imagesy($im) - $sy - $marge_bottom, 0, 0, imagesx($stamp), imagesy($stamp));
// Вывод и освобождение памяти
header('Content-type: image/png');
imagepng($im);
imagedestroy($im);
?>
349 повідомлень
#10 років тому
micros, ага, последний вариант, который привела. Изображения 32 битные)
834 повідомлення
#10 років тому
WebAir,ну круто=) вообще конечно я думаю именно imagemagic все это делается еще проще, но увы я особо не изучал его функционал, из-за того что постоянно GD хватает=)
349 повідомлень
#10 років тому
micros, да, говорят он работает шустрее. особенно когда надо обработать 100К файлов и суть обработки очень грандиозна. а приведенный мной кусок кода это лишь 10%
834 повідомлення
#10 років тому
WebAir, эм, а чего не воспользоваться пакетной обработкой acdsee или фотошопом?=) и быстро, и они такое, уверен, умеют=)