ПредишенСледващото

Начало> Coding> Right преоразмеряване прозрачни изображения с PHP

Правилно преоразмеряване прозрачни изображения на PHP, кодиране
Мисля, че всеки уеб програмист изправени пред задачата да преоразмеряване на изображения. Но това не е просто преоразмерите, както и всяка обработка на изображения в своите проекти. И мисля, че всеки вече има малък мотор клас функция, която преоразмеряване снимки. Но замисляли ли сте за това, което си под наем със сигурност не е в състояние да работи с изображения с прозрачен?

Слава на програмистите, които могат да поддържат всичко в главата си, и да не забравяме за прозрачност в написването на тази функционалност. Но аз забравих един от моите проекти ... Въпреки че, честно казано, аз взех naguglenny например, внимателно възстановен за себе си и вграден в проекта. Но кой знае, че клиентът обича да се зареди един прозрачен образ ...

В повечето случаи otresayzennye изображения, получени черен фон вместо прозрачен (както е в образа на заглавието на статията). Нов фон разбира се може да получи всеки един цвят, той все още е силно зависима от изображението и от неговия формат. Но проблемът все още е известен като "черен фон с прозрачни преоразмеряване снимки."

Както всички знаем, в интернет се използва обикновено три графични формати: PNG, GIF, JPEG. Съответно, прозрачен може да бъде само PNG и GIF. А JPEG не поддържа прозрачност. Това е нашата задача е да се разбере как правилно да преоразмерява PNG и GIF. Тези формати прозрачност realizovanna по различен начин, и се справя с тях съответно трябва да е различно.

PNG преоразмеряване

Мисля, че това е тайна, че в realizovanna подкрепа PNG алфа канал. Това означава, че даден Четири легла цветови компоненти: R (червено), G (зелено), B (синьо), алфа. прозрачност Alpha канал определя конкретен пиксел. Но това е всичко, което трябва да знаете вече, нарязани на ловуване.

Причините за черен фон с PNG преоразмеряват три:

  • Програмистът не създава пълноцветно изображение. Т.е. използва imagecreate функция вместо imagecreatetruecolor
  • Програмист забравя да изключите наслагване прозрачен цвят (или ако тя е вярна - "режим на сдвояване цвят") с помощта на imagealphablending функция. Фактът, че imagecreatetruecolor създава изображение с черен фон. Когато "цветен режим на сдвояване" прозрачен пиксел, не е заместител на заден план и ще се изчислява по нов цвят с нов цвят и цвета на фона на базата на алфа канал на всеки цвят - в края на краищата да се получи напълно прозрачен цвят на пикселите фон - т.е. черно.
  • Програмистът не включва запазване на алфа канал в изходния файл. Отговаря за тази функция imagesavealpha

Е, причините разбрани. Сега реализацията на правото преоразмерите изображение в този формат:

Вижте също

  • Прокси, кеширане и променяте размера на изображения с помощта на Nginx

Прокси, преоразмеряване, кеширане на снимки с помощта на Nginx. Организация на междинен сървър изображение. Минимизиране на разговори с дистанционно SERVERK от преоразмеряване на предварително кеширани изображението по-малко.

Има дистанционно обслужване (наричан images.service.com), подобна функционалност на продуктовия каталог. Той има API, чрез който мога.

  • Така например, работят Captcha

    Един пример за успешна признаване CAPTCHA. Алгоритми, за да отделяте текст от фона. Изолиране на частта текст в картината. Програмата разпознава CAPTCHA.

    Добре дошли! В тази статия ще говорим за няколко метода за разпознаване на защита капитан. Тези техники I показват на експериментално.

  • Дизайн ... И това е необходимо?

    Дизайн грешка, която доведе до пренаписване на проекта от нулата. Как правилно да се проектират приложения.

    Тази тема не съдържа практическа информация. Тук са моите мисли по правилния подход към всеки архитектурен дизайн.

  • Как да работим с IPv6 в PHP

    Ето защо използването на рамка и LIBS. За няколко команди, можете да направите всички едно и също нещо, без дори да мисли, какво има вътре.

    Може би да, това е най-добрият начин ...

    Въпреки това, ако има един недостатък. Когато имате нужда да направите нещо добре, границите на наказателното поле - вие трябва да отидете в минимално възможната за нивото на езика и да го направи там. Например, едно време аз по принцип не е писал на SQL, че пропуснах железопътната activerecord. И тогава тя се нуждае, за да се оптимизира скоростта на заявки двойки, и тук започва. За някои от тях вече почти експерт в това)

    Благодаря ви, много хубаво да се чуе =)

    $ Transparent_color = imagecolorsforindex ($ source_resource $ transparent_source_index.);

    // добавите цвят към палитрата на новото изображение и да го настроите като прозрачен

    $ Transparent_destination_index = imagecolorallocate ($ destination_resource $ transparent_color [ 'червено'] $ transparent_color [ "зелена"] $ transparent_color [ "син"] ...);

    imagecolortransparent ($ destination_resource $ transparent_destination_index.);

    // Във всеки случай, запълване на фона с този цвят

    imagefill ($ destination_resource 0. 0. $ transparent_destination.);

    Когато "За всеки случай, ние запълване на заден план с този цвят" цвят променлива $ transparent_destination не съществува
    имате нужда: $ transparent_destination_index

    както аз го разбирам, сценарият преоразмеряване SIFCO не се прилага за анимация?

    Опасявам се, че не. Аз не съм имал да се справят с преоразмеряване анимационен gifok.

    Ahhhh! pasibo страхотно!
    Всичко е просто и ясно! Обичам, когато това е така, точно като за манекени))))

    Тя не работи. Но намалява фоновия черно!

    imagealphablending ($ картина невярно.);

    imagesavealpha ($ картина вярно.);

    $ PngWaterMarkImg = @ imagecreatefrompng ($ _SERVER [ "DOCUMENT_ROOT"] $ arWaterMark [ "path_to_watermark"].);

    И Денвър всичко работи добре, но на хостинга иска. Prompt, дали нещо зависи от настройките на сървъра? Може би PHP версия или GD? Благодаря.

    Страхувам се, че аз не знам причините за това поведение. Въпреки, че аз не съм особено помня спецификата на работа с изображения в PHP. Ето защо, аз се страхувам, че ще трябва да се търси причината за проблема (
    PS: как да си изберете - моля, отпишете се тук)

    И в моя gife, само първият кадър остава след тази трансформация.
    Така че това трябва да бъде?

    Не. Анимирани SIFCO трябва да се работи малко по-различен начин. Google за преоразмеряване анимационен gifok. Срещнах такъв проблем не е, не може да помогне.

    Благодаря все пак. Много сте избрали.

  • Подкрепете проекта - споделете линка, благодаря!