Что такое код imagepng


Содержание

Что такое imagepng и ImagePng?

Я использую библиотеку, которая использовала ImagePng() для генерации png файлов. Однако я получил Fatal error: Call to undefined function ImagePng() . Я включил расширение GD соответствии с phpinfo .

Я могу запустить скрипт с помощью CLI, но не могу с веб-сервером (apache).

Является ли ImagePng тем же, что и imagepng ?

Два php отличаются друг от друга, один запуск в CLI — 5.5.23, а один из них — веб-сервер 5.5.20 (встроенный с Yosemite).

Я просто нашел, что имена функций php НЕ чувствительны к регистру! WTF!

Можете ли вы сказать, какое расширение следует включить для использования imagepng ? Я уже включил GD2 .

Обновить

imagepng и ImagePng те же, что и имена функций php/class нечувствительны к регистру.

Проблема здесь в том, что встроенное расширение PHP GD для MacOS X не поддерживает PNG и FreeType. Проблема решена в соответствии с здесь.

Встраиваем изображения — data:URL

Как ты, конечно, знаешь, браузер, встретив в HTML тег img, спешит отправить на сервер запрос для загрузки соответствующей картинки. Примерно так же обстоят дела и с CSS-свойством background-image. В общем, как только встречаем картинку — имеем дополнительный запрос (а это время и трафик, в том числе, потраченный на пересылку HTTP заголовка — около килобайта).

Вот такое вот поле для деятельности оптимизатору. Раз каждая картинка — это отдельный запрос, значит, чтобы уменьшить число запросов, нужно уменьшить число отдельных картинок. Поскольку просто выбросить картинки нам никто не даст, остается их объединять — склеивать разные изображения в один файл. Загружаются склеенные картинки одним запросом, а уже потом выбираются нужные участки (благо в CSS есть свойство background-position). Этот типичный подход описан в статье Спрайты: меньше картинок — больше скорость.

Схема data:URL

Но есть и другой вариант. А что, если картинки не клеить между собой, а внедрять прямо на место их использования — непосредственно в HTML и CSS файлы? Конечно, сами файлы при этом несколько «распухнут» — увеличатся в размерах, но зато все загрузится за один запрос. Выигрыш на заголовках может быть весьма ощутимым! И, как ты увидишь ниже, не только на заголовках.

Технически, такая «вклейка» возможна. Базируется она на схеме data:URL. Эта схема позволяет внедрить на веб-страницу данные так, как если бы они были подключены с помощью вызова внешних файлов. Оговорюсь, внедрение возможно не в произвольном месте, а именно в URL (например, в атрибуте src, тега img).

Сразу предупрежу — метод не панацея. Имеет ряд существенных ограничений. Но, давай по порядку.

Как это выглядит?

Все очень просто. Имеем следующий синтаксис:

  • MIME-тип — тип встраиваемых данных (мы будем встраивать рисунки, поэтому, скорее всего, будет что-то типа image/gif или image/png );
  • base64 — означает, что данные закодированы в base64 (если параметр не указан, считается, что данные закодированы в ASCII);
  • данные — собственно набор байт — закодированное изображение.

На практике получатся примерно такие (или во много раз более длинные) громоздкие, но вполне валидные конструкции:

А что с кроссбраузерностью?

Закономерный вопрос. В настоящее время подавляющее большинство браузеров поддерживают эту технологию. Ни с Firefox, ни с Opera, ни с Safari, ни с IE8+ никаких проблем быть не должно.

Для IE6-7 существует альтернативное решение вставки изображений в виде mhtml-включений. Так что можно сказать, что все популярные браузеры позволяют использовать внедрение изображений.

Как обычно, не откладывая в долгий ящик, демо-пример странички с data:URL для фоновых картинок (CSS) и для тега img (HTML).

Как получить код?

С кроссбраузерностью разобрались, пример посмотрели. Теперь самое время, что бы кто-нибудь сказал: «Стоп! Что ты там за символы понавставлял в примере?! Где ты их взял? У меня же просто картинка! Файлик…».

Не беспокойся. За нас уже поработали. Существуют готовые сервисы, которым можно «скормить» файл-картинку и получить соответствующий ей код.

Про размеры картинок

Так как картинка вставляется в URL, на размер кода накладываются некоторые ограничения. Вообще говоря, по спецификации, браузеры обязаны поддерживать URL не менее 1Kb. На самом деле ситуация гораздо лучше. В ходе эксперимента выяснилось, что блок кода картинки до 32Kb можно смело использовать во всех популярных браузерах (FF, Opera, Chorme, Safari, IE6+).

При размере больше 32Kb пасует IE8. Но, если для IE8 использовать не data: URL, а MHTML-включение (как для IE6-7), то можно использовать код до 64Kb.

Важная оговорка! Цифры, приведенные выше, относятся именно к размеру base64-кода картинки. Фактический размер изначального изображения должен быть примерно на треть меньше. Таким образом, имеем безопасное ограничение для размера встраиваемой картинки примерно 20Kb.


В чем сила, брат?

Итак, можно с помощью специального сервиса превращать картинки в строки кода и вставлять их в HTML/CSS. Но это же уйма дополнительной работы! Для чего это все?

Преимуществ метода достаточно много. Вот перечень показавшихся наиболее существенными:

  • все внедренные данные попадают на страницу в результате одного запроса — даже на простенькой странице так можно выиграть десятки килобайт на заголовках HTTP, то есть уменьшить нагрузку на сеть и не терять время на ожидание обмена информацией между сервером и клиентом при каждом запросе;
  • некоторые браузеры имеют ограничение по количеству параллельных подключений к серверу, встроенные данные освобождают подключения для загрузки другого контента;
  • меньше используется файлов — значит меньше файлов попадет в кеш, в некоторых ситуациях это может быть важно;
  • дополнительная функциональность — например, браузер может перекодировать в data:URL картинку, находящуюся в буфере, и вставить ее в HTML поле ввода;
  • шаблоны e-mail сообщений могут содержать картинки, например, подпись или фоновый рисунок, без необходимости использовать вложения.
Илон Маск рекомендует:  Работа с Cookie. Java Script

Обратная сторона медальки

Недостатков тоже хватает:

  • трудоемкость при разработке и поддержке. Мы не просто пишем адрес картинки, а еще и тратим время, кодируя/декодируя ее;
  • утверждается, что закодированные в Base64 данные примерно на треть больше по размеру, чем исходный файл изображения. Этот негативный момент можно устранить, если использовать gzip сжатие — такие данные будут хорошо жаться;
  • для HTML теряется выгода от кеширования — внедренные картинки, являясь единым целым с HTML-страницей, перезагружаются каждый раз, когда перезагружается документ;
  • браузеры имеют ограничения по длине URL, что определяет максимальный размер данных. То есть метод неприменим для больших картинок;
  • данные включаются как простой поток, и многие среды обработки не могут поддерживать контейнеры (вроде multipart/alternative или message/rfc822), чтобы обеспечить большую гибкость, типа метаданных, сжатия данных или согласования контента по языку.

Где применять?

Перечень достоинств и недостатков весьма внушительный. Однозначно одобрить или забраковать данную технологию невозможно. Просто она имеет ограниченную область применения.

Очевидно, что выигрыш от использования data:URL для CSS существенно больше, чем для HTML (где теряем выгоды от кеша и получаем дополнительный геммор с IE6-7). Так же имеем очень существенную оговорку о максимальном размере закодированного файла (да еще для разных браузеров он разный).

Вывод напрашивается сам собой: встроенные, при помощи data:URL, изображения имеет смысл использовать в CSS, для небольших фоновых картинок — получим выигрыш в быстродействии.

Подходит для высоконагрузочных проектов, или проектов, где важна скорость загрузки.

О производительности

update 23.02.11 by Ksayri Применение data:URL способно существенно снизить (до 10 раз) производительность некоторых браузеров. В частности это касается Firefox (который тратит очень много ресурсов на обработку base64) и IE6-7 (которым приходится иметь дело с mhtml). Чем больше будет data:URL на странице, тем больше будет тормозить.

Поэтому сейчас оптимальным решением будет приметь сначала CSS спрайты, а затем преобразовывать минимальное количество спрайтов в data:URL.

Что такое код imagepng

Группа: Full member
Сообщений: 94
Регистрация: 13.01.2004

Группа: Full member
Сообщений: 43
Регистрация: 13.02.2003
Из: St Petersburg

Упс виноват не читал примеры.
То что это моя картинка верю )))

С header не получается. Т.к. у меня кроме рисунка на странице присутствует еще и текст (( и он видимо сбивает работу браузера.

Если текст убрать, то рисунок выводится (правда Explorer его сжимает но это не важно, главное что есть)..
Если текст не убирать, то рисунок выводится «текстом», причем объем «текста» в цать раз больше чем без хидера (видимо вместе с хидером он выводится полностю, а без хидера чем-то режется).

хидер вставлял после инициализации сессии..

Объясните пожалуйста, как следует поступить или где еще почитать.

Заранее огромное спасибо!

Группа: Full member
Сообщений: 94
Регистрация: 13.01.2004

Что такое imagepng и ImagePng?

Я использую библиотеку , которая используется ImagePng() для создания файлов в формате PNG. Однако я получил Fatal error: Call to undefined function ImagePng() . Я включил GD расширение в соответствии с phpinfo .

Я могу запустить скрипт с CLI, но не может с веб-сервера (Apache).

Является ли ImagePng такой же , как один imagepng ?

Два ПГПС различны, один прогон в CLI является 5.5.23, и один прогон на веб-сервер 5.5.20 (встроенный с Yosemite).


Я просто нашел, что имена функций PHP не чувствительны к регистру! WTF!

Можете ли вы сказать мне , что расширение я должен позволить использовать imagepng ? Я уже включен GD2 .

Обновить

imagepng и ImagePng те же имена , потому что функция / класс РНР чувствительны к регистру.

Проблема здесь состоит в том , что встроенный в GD расширения РНР в MacOS X не поддерживает PNG и FreeType. Задача решается в соответствии с здесь .

PHP: create image with ImagePng and convert with base64_encode in a single file?

I have created an image with ImagePng(). I dont want it to save the image to the file system but want to output it on the same page as base64 encode inline Image, like

which does not work.

Is this possible in a single PHP file at all?

Thanks in advance!

3 Answers 3

The trick here will be to use output buffering to capture the output from imagepng() , which either sends output to the browser or a file. It doesn’t return it to be stored in a variable (or base64 encoded):

This is adapted from a user example in the imagepng() docs.

I had trouble using the ob_get_contents() when using PHP with AJAX, so I tried this:

This saves a temporary image file on the server and then it is removed after it is encoded and echoed out.

If you do not wish to store to an explicit file, and you are already using ob_start() for something else (so you cannot use ob_start for this case without a lot of refactoring), you can define your own stream wrapper that store a stream output to a variable.

You use stream_wrapper_register to register a new stream wrapper, and implement its stream_write method to write it to a variable whose value you can retrieve later. Then you pass this stream (actually you just need to pass the URI for this stream) to imagepng . imagepng wanting to close your stream won’t bother you, as long as your stream wrapper doesn’t destroy the data when it is closed ( stream_close method called).

Not the answer you’re looking for? Browse other questions tagged php image gd or ask your own question.

Linked

Hot Network Questions

Subscribe to RSS

To subscribe to this RSS feed, copy and paste this URL into your RSS reader.

site design / logo © 2020 Stack Exchange Inc; user contributions licensed under cc by-sa 4.0 with attribution required. rev 2020.11.12.35412

Что такое base64 и зачем он нужен в веб разработке?

Base64 – способ кодирования произвольных двоичных данных в ASCII текст. По своей сути кодирование очень простое. Каждые шесть бит на входе кодируется в один из символов 64-буквенного алфавита. “Стандартный” алфавит, который для этого используется – это A-Z , a-z , 0-9 , + , / и = в качестве заполняющего символа в конце. Таким образом, на каждые 3 байта данных приходится 4 символа. Существуют и другие вариации Base64 (в основном это касается использования других символов вместо + и / , но в веб разработке вы вряд ли когда-либо с ними встретитесь)

Зачем это нужно?

Так исторически сложилось, что многие форматы передачи и хранения данных используют текст вместо бинарных кодов (html, url схемы, xml, email… и тп). Но что, если формат передачи данных текстовый, а передать необходимо бинарные данные (отдельно либо вместе с текстовыми данными). Вот тут на помощь и приходит base64.

Типовое применение в веб разработке

  1. data: URL схемы для изображений (css, html) .. см. далее подробнее.
  2. Получение base64 представления бинарных данных canvas битмапа .. см. далее подробнее.
  3. Передача картинок и других данных в XML (не используя внешние файлы).

  4. Хранение изображений в базе данных (только если вы знаете, что делаете и зачем).
  5. Включение изображений в email. … (Автор с удовольствием добавит пункты в этот список, если вы подскажете в комментариях).
Илон Маск рекомендует:  Что такое код ifx_create_blob

data: URL и base64 data: URL — это определённая стандартом RFC 2397 схема, которая позволяет включать небольшие элементы данных в строку URL, как если бы они были ссылкой на внешний ресурс. Согласно RFC «data: URI» – это фактически «data: URL» (URL — унифицированный указатель ресурса), хотя реально он ни на что не указывает.

Формат data: URL следующий:

Несколько типовых применений на примерах.

Пример использования в HTML:

(Переносы на новую строку осуществлены для облегчения восприятия. Их не должно быть) Все, что следует за data:image/png;base64, – это base64 код небольшого png изображения (красная точка 10×10 px). Этот пример будет выглядеть так –

Пример использования в CSS:

Получение бинарных данных из canvas в виде текстового base64 представления

12 comments on “ Что такое base64 и зачем он нужен в веб разработке? ”

Так а чем лучше такой подход для изображений? Не раскрыта тема, зачем надо такое использовать.

  1. Есть ведь спрайты, в которые мелкие картинки можно запихнуть
  2. Рост css не будет сильно критичным, какой длины может достигать base64 строка, при каких размерах файла будет целесообразно использовать base64? Спасибо

Хорошее замечание ;) попробуем разобраться.

Такой подход лучше только в тех случаях, когда в зависимости от задачи Вам удобно:

  • Избавится от одного или нескольких внешних подгружаемых файлов (изображений, шрифтов, SVG..), включив их непосредственно в CSS в виде base64.
  • Устранить время задержки между загрузкой (отрисовкой) основного CSS и внешнего подгружаемого содержимого (изображений, шрифтов, SVG..)

Включение картинки непосредственно в CSS в виде base64, позволит браузеру отобразить ее при первой отрисовке страницы, не делая дополнительных запросов к серверу. Это особенно заметно в медленных мобильных браузерах и при медленном соединении.

Так же можно поступить с подгружаемыми шрифтами. Включая их в CSS в виде base64, вы гарантируете, что кастомный шрифт уже будет правильно отображен во время первой отрисовки страницы, а не спустя некоторое время (которое обычно браузер тратит на подгрузку внешнего шрифта)

Я не советую использовать этот подход везде, но в зависимости от задачи и требований к приложению, иногда такой подход может быть лучше. В целом.. Если пункты a) и b) не критичны для Ваших проектов, то включать изображения в css/html в виде base64 не стоит :)

Другие области применения в веб

  • Работа c canvas ( там практически никуда не денешься не зная, что такое base64 :) )
  • Передача картинок и других данных в XML (не используя внешние файлы).
  • Включение изображений в email.

Отличная статья, спасибо. Особенно актуально для email-писем.

Можно заметить что при малых размерах изображений css, применяя gzip сжатие для файла стилей(и отдачу сжатого файла с сервера) получаем не только устранение запросов но и сокращение объёма(20%-25%).

Встраиваем изображения — data:URL

Как ты, конечно, знаешь, браузер, встретив в HTML тег img, спешит отправить на сервер запрос для загрузки соответствующей картинки. Примерно так же обстоят дела и с CSS-свойством background-image. В общем, как только встречаем картинку — имеем дополнительный запрос (а это время и трафик, в том числе, потраченный на пересылку HTTP заголовка — около килобайта).

Вот такое вот поле для деятельности оптимизатору. Раз каждая картинка — это отдельный запрос, значит, чтобы уменьшить число запросов, нужно уменьшить число отдельных картинок. Поскольку просто выбросить картинки нам никто не даст, остается их объединять — склеивать разные изображения в один файл. Загружаются склеенные картинки одним запросом, а уже потом выбираются нужные участки (благо в CSS есть свойство background-position). Этот типичный подход описан в статье Спрайты: меньше картинок — больше скорость.

Схема data:URL

Но есть и другой вариант. А что, если картинки не клеить между собой, а внедрять прямо на место их использования — непосредственно в HTML и CSS файлы? Конечно, сами файлы при этом несколько «распухнут» — увеличатся в размерах, но зато все загрузится за один запрос. Выигрыш на заголовках может быть весьма ощутимым! И, как ты увидишь ниже, не только на заголовках.

Технически, такая «вклейка» возможна. Базируется она на схеме data:URL. Эта схема позволяет внедрить на веб-страницу данные так, как если бы они были подключены с помощью вызова внешних файлов. Оговорюсь, внедрение возможно не в произвольном месте, а именно в URL (например, в атрибуте src, тега img).


Сразу предупрежу — метод не панацея. Имеет ряд существенных ограничений. Но, давай по порядку.

Как это выглядит?

Все очень просто. Имеем следующий синтаксис:

  • MIME-тип — тип встраиваемых данных (мы будем встраивать рисунки, поэтому, скорее всего, будет что-то типа image/gif или image/png );
  • base64 — означает, что данные закодированы в base64 (если параметр не указан, считается, что данные закодированы в ASCII);
  • данные — собственно набор байт — закодированное изображение.

На практике получатся примерно такие (или во много раз более длинные) громоздкие, но вполне валидные конструкции:

А что с кроссбраузерностью?

Закономерный вопрос. В настоящее время подавляющее большинство браузеров поддерживают эту технологию. Ни с Firefox, ни с Opera, ни с Safari, ни с IE8+ никаких проблем быть не должно.

Для IE6-7 существует альтернативное решение вставки изображений в виде mhtml-включений. Так что можно сказать, что все популярные браузеры позволяют использовать внедрение изображений.

Как обычно, не откладывая в долгий ящик, демо-пример странички с data:URL для фоновых картинок (CSS) и для тега img (HTML).

Как получить код?

С кроссбраузерностью разобрались, пример посмотрели. Теперь самое время, что бы кто-нибудь сказал: «Стоп! Что ты там за символы понавставлял в примере?! Где ты их взял? У меня же просто картинка! Файлик…».

Не беспокойся. За нас уже поработали. Существуют готовые сервисы, которым можно «скормить» файл-картинку и получить соответствующий ей код.

Про размеры картинок

Так как картинка вставляется в URL, на размер кода накладываются некоторые ограничения. Вообще говоря, по спецификации, браузеры обязаны поддерживать URL не менее 1Kb. На самом деле ситуация гораздо лучше. В ходе эксперимента выяснилось, что блок кода картинки до 32Kb можно смело использовать во всех популярных браузерах (FF, Opera, Chorme, Safari, IE6+).

При размере больше 32Kb пасует IE8. Но, если для IE8 использовать не data: URL, а MHTML-включение (как для IE6-7), то можно использовать код до 64Kb.

Важная оговорка! Цифры, приведенные выше, относятся именно к размеру base64-кода картинки. Фактический размер изначального изображения должен быть примерно на треть меньше. Таким образом, имеем безопасное ограничение для размера встраиваемой картинки примерно 20Kb.

В чем сила, брат?

Итак, можно с помощью специального сервиса превращать картинки в строки кода и вставлять их в HTML/CSS. Но это же уйма дополнительной работы! Для чего это все?

Преимуществ метода достаточно много. Вот перечень показавшихся наиболее существенными:

  • все внедренные данные попадают на страницу в результате одного запроса — даже на простенькой странице так можно выиграть десятки килобайт на заголовках HTTP, то есть уменьшить нагрузку на сеть и не терять время на ожидание обмена информацией между сервером и клиентом при каждом запросе;
  • некоторые браузеры имеют ограничение по количеству параллельных подключений к серверу, встроенные данные освобождают подключения для загрузки другого контента;
  • меньше используется файлов — значит меньше файлов попадет в кеш, в некоторых ситуациях это может быть важно;
  • дополнительная функциональность — например, браузер может перекодировать в data:URL картинку, находящуюся в буфере, и вставить ее в HTML поле ввода;
  • шаблоны e-mail сообщений могут содержать картинки, например, подпись или фоновый рисунок, без необходимости использовать вложения.
Илон Маск рекомендует:  Нестандартный вид текстовых полей

Обратная сторона медальки

Недостатков тоже хватает:

  • трудоемкость при разработке и поддержке. Мы не просто пишем адрес картинки, а еще и тратим время, кодируя/декодируя ее;
  • утверждается, что закодированные в Base64 данные примерно на треть больше по размеру, чем исходный файл изображения. Этот негативный момент можно устранить, если использовать gzip сжатие — такие данные будут хорошо жаться;
  • для HTML теряется выгода от кеширования — внедренные картинки, являясь единым целым с HTML-страницей, перезагружаются каждый раз, когда перезагружается документ;
  • браузеры имеют ограничения по длине URL, что определяет максимальный размер данных. То есть метод неприменим для больших картинок;
  • данные включаются как простой поток, и многие среды обработки не могут поддерживать контейнеры (вроде multipart/alternative или message/rfc822), чтобы обеспечить большую гибкость, типа метаданных, сжатия данных или согласования контента по языку.

Где применять?

Перечень достоинств и недостатков весьма внушительный. Однозначно одобрить или забраковать данную технологию невозможно. Просто она имеет ограниченную область применения.

Очевидно, что выигрыш от использования data:URL для CSS существенно больше, чем для HTML (где теряем выгоды от кеша и получаем дополнительный геммор с IE6-7). Так же имеем очень существенную оговорку о максимальном размере закодированного файла (да еще для разных браузеров он разный).

Вывод напрашивается сам собой: встроенные, при помощи data:URL, изображения имеет смысл использовать в CSS, для небольших фоновых картинок — получим выигрыш в быстродействии.

Подходит для высоконагрузочных проектов, или проектов, где важна скорость загрузки.

О производительности


update 23.02.11 by Ksayri Применение data:URL способно существенно снизить (до 10 раз) производительность некоторых браузеров. В частности это касается Firefox (который тратит очень много ресурсов на обработку base64) и IE6-7 (которым приходится иметь дело с mhtml). Чем больше будет data:URL на странице, тем больше будет тормозить.

Поэтому сейчас оптимальным решением будет приметь сначала CSS спрайты, а затем преобразовывать минимальное количество спрайтов в data:URL.

Что такое imagepng и ImagePng?

November 2020

325 раз

Я использую библиотеку , которая используется ImagePng() для создания файлов в формате PNG. Однако я получил Fatal error: Call to undefined function ImagePng() . Я включил GD расширение в соответствии с phpinfo .

Я могу запустить скрипт с CLI, но не может с веб-сервера (Apache).

Является ли ImagePng такой же , как один imagepng ?

Два ПГПС различны, один прогон в CLI является 5.5.23, и один прогон на веб-сервер 5.5.20 (встроенный с Yosemite).

Я просто нашел, что имена функций PHP не чувствительны к регистру! WTF!

Можете ли вы сказать мне , что расширение я должен позволить использовать imagepng ? Я уже включен GD2 .

Обновить

imagepng и ImagePng те же имена , потому что функция / класс РНР чувствительны к регистру.

Проблема здесь состоит в том , что встроенный в GD расширения РНР в MacOS X не поддерживает PNG и FreeType. Задача решается в соответствии с здесь .

IntSystem.org

Случаи из опыта разработки различных WEB проектов. Интересные факты, статьи, впечатления. Программирование и все о нем в сфере WEB.

Правильный ресайз прозрачных картинок на PHP

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

Честь и хвала тем программистам, которые могут удержать все в голове, и при написании подобного функционала они не забыли про прозрачность. А я вот забыл в одном из своих проектов… Хотя, чесно говоря, я взял нагугленный пример, чутка переделал для себя и встроил в проект. Но кто же знал, что клиент любит загружать прозрачные картинки…

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

Как всем известно, в вебе обычно используется три формата изображений: PNG, GIF, JPEG. Соответственно прозрачными могут быть только PNG и GIF. А JPEG прозрачность не поддерживает. То есть наша задача состоит в том чтобы разобраться как правильно ресайзить PNG и GIF. У этих форматов прозрачность реализованна по-разному, и обрабатывать их надо соответственно по-разному.

Ресайзим PNG

Я думаю ни для кого не секрет, что в PNG реализованна поддержка альфа канала. То есть цвет задается четырмя компонентами: R (красный), G (зеленый), B (синий), альфа. Альфа канал задает прозрачность конкретного пикселя. Впрочем это все вы должны уже знать, перейдем к сути.

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

  • Программист создает не полноцветное изображение. Т.е. использует функцию imagecreate вместо imagecreatetruecolor
  • Программист забывает отключить наложение прозрачного цвета (или если правильно — «режим сопряжения цветов») с помощью функции imagealphablending. Дело в том что imagecreatetruecolor создает изображение с черным фоном. При включенном «режиме сопряжения цветов» прозрачный пиксель, не заменит фон, а будет рассчитан новый цвет в соответствии с новым цветом и цветом фона с учетом альфа канала обоих цветов — в итоге для полностью прозрачного пикселя получаем фоновой цвет — т.е. черный.
  • Программист не включает сохранение альфа канала в выходной файл. За это отвечает функция imagesavealpha

Чтож, с причинами разобрались. Теперь реализация правильного ресайза PNG картинки:

imagepng ($ изображения); Защитный код и переменные сессии

я следующий код:

и get_captcha.php является:

Проблема заключается в том, что когда я запускаю первый раз тест -captcha.php я получаю следующее сообщение об ошибке: Undefined индекс: СЛУЧАЙНОЕ_ЧИСЛО в тест-captcha.php на линии 17 ($ _SESSION [ «случайное_число»] не установлен . )

После обновления страницы за $ _SESSION [ ‘Rando m_number ‘] отображает предыдущий текст перехвата! Есть ли у кого-нибудь идеи, почему это происходит .

Создан 17 ноя. 12 2012-11-17 08:51:23 Carly

попробуйте установить $ _SESSION в случайных числах test-captcha.php не в get_captcha.php – Mohammad Ahmad 17 ноя. 12 2012-11-17 08:59:14

такая же проблема здесь :), я много искал об этом решении, но никак не мог – echo_Me 17 фев. 14 2014-02-17 00:22:22

2 ответа

Потому что первый раз сеанс есть пустой. , поэтому в первый раз вы должны установить любое значение для сеанса.

Что-то вроде этого вы хотите.
Попробуйте.

Создан 17 ноя. 12 2012-11-17 09:01:54 Daxen

Понравилась статья? Поделиться с друзьями:
Кодинг, CSS и SQL