GD и борьба с прозрачностью

1.18K
.
(\/)____o_O____(\/)
Думаю тема избитая до немогу
не раз наверное у кого либо получался черный фон или что то подобное, интересуют пути решения, так как я все эту хрень не могу отследить ни как, от чего зависит и сделать универсальный способ
.
я же недавно совсем давал тут ссылку на результат и код
ща докурю и найду
.
(\/)____o_O____(\/)
еще нужны пару картинок разных форматов в архиве, для тестов, в архиве для того чтоб здешний аплоад не наломал
.
Кадило крутится, лавэха мутится
Прозрачность ток у png может быть
.
(\/)____o_O____(\/)
Simba, но для пнг написанное ломает жипег
.
(\/)____o_O____(\/)
я уже пересматриваю imagick
.
if($imgsize['mime']=='image/png'){
                    $src = ImageCreateFromPng($image);
                    $dst = ImageCreateTrueColor($tn_width, $tn_height);
                    $black = imagecolorallocate($dst, 0, 0, 0);
                    imagecolortransparent($dst, $black);
                    imagealphablending($dst, false); // one
                    imageSaveAlpha($dst, true); // two
                    imagecopyresampled($dst, $src, 0, 0, 0, 0, $tn_width, $tn_height, $width, $height);
                    if(isset($this->query[1]) AND $this->query[1]='preview') {
                       $copy = ImageCreateFromPng('image/copy.png');
                        imagealphablending($dst, true); //three (from replace watermark true alfa chanel save [!] only  from watermark replace over resize source image)
                        imagecopyresampled($dst, $copy, $tn_width - 125, $tn_height - 35, 0, 0, 125, 35, 125, 35);
                        ImageDestroy($copy);
                    }

                    header("Content-type: image/png");
                    ImagePng($dst, null);
                    ImageDestroy($src);
                    ImageDestroy($dst);
                }
.
# Koenig (17.08.2016 / 02:06)
Simba, но для пнг написанное ломает жипег
чавой?
ты зачем жипег как пнг крутишь?
.
ramzes
поясню
раз: позволяет использовать режим сопряжения цветов
нам этого ненадо, иначе наша подложка с прозрачностью созданной абы как (дедовский способ замены цвета на альфа канал) транслируется на ресурс (картинку, далее ресурс)
и так, вырубаем трансляцию прозрачности и вообще всего с подложки на ресурс.
______
два: устанавливает флаг сохранять всю информацию альфа компонентапротивовес одноцветной прозрачности) и сохраняет PNG изображение.
так как у нас в ресурсе настоящий альфаканал, и нам надо его сохранить, включаем сохранение оного, без замещения нашим дедовским методом использованном на подложке)
короче, если этого не сделать, под альфой прорисуется не прозрачная подложка, а дефолтный цвет, и только под ним будет подложка. но мы ее уже не увидим, под дефолтным цветом
________
три:
ватермарк. обычно прозрачный фон и текст или иконка (короче пнг, с альфой)
теперь нам надо наоборот включить ранее выключенное сопряжение цветов, иначе наша тру-альфа (ресурс) проигнорирует альфаканал ватармарка и влепит дефолтный фон (черный\белый, х.з. не помню)
________
для НЕпнг изображений с наложением ватермарка:
пропускаем первый и третий пункт
нам нужно только одно:
второй пункт, но примененный к ватермарку

$copy = imagecreatefrompng('image/copy.png');
imageSaveAlpha($copy, true); // это

включить сохранение информации об альфе в ватермарке
.
imagesavealfa не только тупо сохраняет прозрачность, она полностью сохраняет весь альфаканал, т.е. не будет ни каких рубленных углов и прочего уродства, сохраняются все полутона с частичной прозрачностью, плавные переходы, тени и т.д.
короче это не гд тупая либа, это мы ее готовили так как дед научил
но имагик говорят жмет лучше с меньшей потерей качества.
правда это только говорят, и он вроде как не везде есть
Всего: 42