Надежда С.
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 років тому
micros, нет, не помогло (
Надежда С.
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);
?>
Сергей Глушко
834 повідомлення
#10 років тому
WebAir, получилось?+)
Надежда С.
349 повідомлень
#10 років тому
micros, ага, последний вариант, который привела. Изображения 32 битные)
Сергей Глушко
834 повідомлення
#10 років тому
WebAir,ну круто=) вообще конечно я думаю именно imagemagic все это делается еще проще, но увы я особо не изучал его функционал, из-за того что постоянно GD хватает=)
Надежда С.
349 повідомлень
#10 років тому
micros, да, говорят он работает шустрее. особенно когда надо обработать 100К файлов и суть обработки очень грандиозна. а приведенный мной кусок кода это лишь 10%
Сергей Глушко
834 повідомлення
#10 років тому
WebAir, эм, а чего не воспользоваться пакетной обработкой acdsee или фотошопом?=) и быстро, и они такое, уверен, умеют=)
Надежда С.
349 повідомлень
#10 років тому
micros, удалять watermark не умеют, а мой скрипт умеет )