Что такое код imagetruecolortopalette

Что такое код imagetruecolortopalette

imagetruecolortopalette — конвертирует изображение true color в палитровое изображение.

Описание

void imagetruecolortopalette (resource image, bool dither, int ncolors)

imagetruecolortopalette() конвертирует truecolor-изображение в палитровое/palette изображение. Код для этой функции был первоначально взят из превосходного кода библиотеки Independent JPEG Group. Этот код был модифицирован, чтобы сохранить максимальное количество информации alpha-канала в результирующей палитре, сохраняя также, по возможности, цвета. Это не работает так, как хотелось бы. Обычно лучше просто создать выводное изображение truecolor, что гарантирует высокое качество вывода.

dither — если TRUE , используется dithering, что даёт более пятнистое изображение, но с лучшей цветопередачей.

ncolors устанавливает максимальное количество цветов палитры.

Примечание: эта функция была введена в PHP 4.0.6 и требует GD 2.0.1 или новее.


Назад Оглавление Вперёд
imagesy Вверх imagettfbbox

Если Вы не нашли что искали, то рекомендую воспользоваться поиском по сайту:

imagetruecolortopalette

(PHP 4 >= 4.0.6, PHP 5)

imagetruecolortopalette — Convert a true color image to a palette image

Описание

imagetruecolortopalette() converts a truecolor image to a palette image. The code for this function was originally drawn from the Independent JPEG Group library code, which is excellent. The code has been modified to preserve as much alpha channel information as possible in the resulting palette, in addition to preserving colors as well as possible. This does not work as well as might be hoped. It is usually best to simply produce a truecolor output image instead, which guarantees the highest output quality.

Список параметров

Ресурс изображения, полученный одной из функций создания изображений, например, такой как imagecreatetruecolor() .

Indicates if the image should be dithered — if it is TRUE then dithering will be used which will result in a more speckled image but with better color approximation.

Sets the maximum number of colors that should be retained in the palette.

Возвращаемые значения

Возвращает TRUE в случае успешного завершения или FALSE в случае возникновения ошибки.

Примеры

Пример #1 Converting a true color image to a palette-based image

// Create a new true color image
$im = imagecreatetruecolor ( 100 , 100 );

// Convert to palette-based with no dithering and 255 colors
imagetruecolortopalette ( $im , false , 255 );

// Save the image
imagepng ( $im , ‘./paletteimage.png’ );
imagedestroy ( $im );
?>

Примечания

Замечание: Эта функция нуждается в GD версии 2.0.1 или выше.

imagetruecolortopalette

(PHP 4 >= 4.0.6, PHP 5, PHP 7)

imagetruecolortopalette — Преобразование полноцветного изображения в палитровое

Описание

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

Список параметров

Ресурс изображения, полученный одной из функций создания изображений, например, такой как imagecreatetruecolor() .

Если задано TRUE , изображение будет сглаживаться. Сглаживание увеличивает шумность картинки, но в то же время обеспечивает лучшую передачу цветов.

Задает максимальное количество цветов в палитре.

Возвращаемые значения

Возвращает TRUE в случае успешного завершения или FALSE в случае возникновения ошибки.

Примеры

Пример #1 Преобразование truecolor-изображения в палитровое

// Создание полноцветного изображения
$im = imagecreatetruecolor ( 100 , 100 );

// Преобразование в палитровое (255 цветов) без сглаживания
imagetruecolortopalette ( $im , false , 255 );

ImageTrueColorToPalette losing colors

I have a PHP script that converts true color images to palette images if the number of different colors in the image is less than or equal to 256.

In my test case, I have an image that contains 79 colors. After running ImageTrueColorToPalette on it without dither and the $ncolors parameter set to 79, I have an image that only has 15 colors in it. I have even tried running ImageColorMatch on it after converting it to palette, and I still end up with only 15 colors.

Using GD in PHP, how can I convert my true color image to a palette image without losing all of those colors?

1 Answer 1

It appears I can convert the true color image to a palette image by creating a palette image using ImageCreate and then copying the true color image to that one. This produces much better results than ImageTrueColorToPalette .

Why ImageTrueColorToPalette gives me a crappy looking image, I’m not really sure, but this seems like an adequate workaround.

Not the answer you’re looking for? Browse other questions tagged php image-processing 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

почему меняются цвета при использовании imagetruecolortopalette ()?

У меня есть изображение 4×4 пикселей, каждый пиксель имеет точный цвет, который я хочу, например # 439902 и т. Д.,

Я беру свое изображение, преобразовываю его в палитру с помощью функции gd imagetruecolortopalette() , затем пытаюсь найти ближайший цвет в моем изображении к другому предопределенному цвету, используя imagecolorclosest() , проблема в том, что он возвращает другой цвет, Это не в моем изображении 4×4, цвет близок к одному из моих цветов, но мне нужно его точно.

Я думаю, что проблема в том, что когда я использую imagetruecolortopalette() все цвета в моем изображении 4х4 слегка меняются,

Есть ли способ обойти эту проблему?

В качестве примера.

если я ищу (66,100,39), то мой ближайший матч: (76,90,56).

ну 76,90,56 изменилось, потому что цвет был (78,98,43) в моем исходном изображении. Я знаю, что это не так уж далеко, но мне нужно, чтобы остаться прежним

PHP + GD: imagetruecolortopalette не сохраняя прозрачность

Я использую GD для вывода изображения, который представляет собой полноцветный + альфа-канал PNG файл, используя imagepng просто отлично. Тем не менее, я хотел бы иметь возможность также выводить ie6-совместимый 256-цветный PNG, а также. Согласно официальной документации imagetruecolortopalette:

Код был изменен, чтобы сохранить как можно больше информации об альфа-канале, как это возможно в результате палитре, в дополнение к сохранению цвета, а также, насколько это возможно.

Тем не менее, я нахожу, что результаты этой функции не должным образом сохранить любую прозрачность вообще. я использовал это светлячок изображение с текстом, наложенной поверх него в качестве теста, и все функции же было дать мне белый фон и странный темно-синюю границу. Я знаю, что я не могу надеяться сохранить полный альфа-канал, но, конечно, эта функция, по крайней мере, поднять на прозрачном фоне. Есть ли что-то я не хватает? Существуют ли какие-либо альтернативные подходы, которые я могу предпринять?

3 ответа

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

Что такое код imagetruecolortopalette

imagetruecolortopalette — конвертирует изображение true color в палитровое изображение.

Описание

void imagetruecolortopalette (resource image, bool dither, int ncolors)

imagetruecolortopalette() конвертирует truecolor-изображение в палитровое/palette изображение. Код для этой функции был первоначально взят из превосходного кода библиотеки Independent JPEG Group. Этот код был модифицирован, чтобы сохранить максимальное количество информации alpha-канала в результирующей палитре, сохраняя также, по возможности, цвета. Это не работает так, как хотелось бы. Обычно лучше просто создать выводное изображение truecolor, что гарантирует высокое качество вывода.

dither — если TRUE , используется dithering, что даёт более пятнистое изображение, но с лучшей цветопередачей.

ncolors устанавливает максимальное количество цветов палитры.

Примечание: эта функция была введена в PHP 4.0.6 и требует GD 2.0.1 или новее.

PHP + GD: imagetruecolortopalette не сохраняет прозрачность

Я использую GD для вывода изображения, которое является файлом PNG с truecolor + alpha channel, используя imagepng просто отлично. Тем не менее, я хотел бы иметь возможность также выводить 256-цветный PNG, совместимый с ie6. Согласно официальной документации для imagetruecolortopalette:

Код был изменен, чтобы сохранить как можно больше информации о альфа-каналах в полученной палитре, в дополнение к сохранению цветов, а также возможно.

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

ImageTrueColorToPalette проигрывает цвета

У меня есть PHP script, который преобразует истинные цветные изображения в палитры изображений, если количество разных цветов на изображении меньше или равно 256.

В моем тестовом примере у меня есть изображение, содержащее 79 цветов. После запуска ImageTrueColorToPalette на нем без сглаживания и параметра $ncolors, установленного на 79, у меня есть изображение, в котором есть только 15 цветов. Я даже попытался запустить ImageColorMatch на нем после преобразования его в палитру, и я все еще получаю только 15 цветов.

Используя GD в PHP, как я могу преобразовать свое истинное цветное изображение в образ палитры, не теряя при этом всех этих цветов?

php image-processing gd

1 ответ

1 Решение Joe Lencioni [2011-03-04 18:30:00]

Кажется, я могу преобразовать истинное цветное изображение в образ палитры, создав изображение палитры с помощью ImageCreate , а затем скопировав изображение с истинным цветным изображением. Это дает гораздо лучшие результаты, чем ImageTrueColorToPalette .

Почему ImageTrueColorToPalette дает мне дерьмовый образ, я не уверен, но это похоже на адекватное обходное решение.

PHP неверный результат для imagetruecolortopalette с PNG с прозрачностью

image-processing php-gd (4)

Я не думаю, что это странное поведение.

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

Поскольку сначала вы устанавливаете палитру на 255 пикселей (или 256), вы преобразуете все темные области в черный цвет и теряете всю прозрачность. Когда вы заливаете заливку, начиная с левой верхней части, все подключенные пиксели (также внутри пингвина и утки) станут прозрачными.

Я думаю, что единственный способ сделать это без ImageMagick — перебрать все пиксели изображения с измененным размером и вручную установить цвет пикселя для ограниченного поддона.

Некоторое время назад я написал небольшой скрипт, который уменьшает цвета PNG, сохраняя полную альфа-информацию (1). Это уменьшит размер файла PNG и, следовательно, размер файла. Не имеет большого значения, будет ли полученный PNG больше 8 бит. Небольшой поддон в любом случае уменьшит размер файла.

Изменить: я просто использовал ваш PNG с измененным размером (с прозрачностью) в качестве входных данных для моего сценария и преобразовал его из файла 12 КБ в 7 КБ, используя только 32 цвета:

Reduced to 62.28% of original, 12.1kB to 7.54kB

Я пытаюсь написать скрипт, который изменяет размер изображения PNG, а затем преобразует его в битовый режим PNG-8. Таким образом, размер полученного файла будет меньше, но без потери качества.

Изменить: стиль цитаты для изображений, чтобы лучше показать прозрачность

Изменение размера отлично работает, сохраняя прозрачность:

Проблема в том, когда я конвертирую изображение в 8 бит:

В результате получается изображение с прозрачностью вокруг и немного внутри изображения:

Если я установлю 256 цветов вместо 255:

изображение будет с черным фоном:

Аналогичный результат происходит с этим изображением (обратите внимание на полупрозрачность для случая с 255 цветами):

Полный код функции:

  • https://stackoverflow.com/a/55402802/2342558

ничего не меняется

  • другие ТАК сообщения и некоторые в Интернете

Также без изменения размера изображения (удаление imagecopyresampled и адаптация имени переменной) результат будет таким же.

Не могли бы вы помочь мне заставить его работать и понять причину этого странного поведения?

Некоторая информация в phpinfo() :

  • PHP 7.0.33
  • GD комплекте (2.1.0 совместимый)
  • PNG Support включена
  • libPNG 1.5.13.

В GIMP v.2.8.22 я могу сохранить изображение для Web со следующими свойствами:

и это производит уменьшенное изображение, почти идентичное оригиналу.

Также pngquant, tinypng и многие другие выполняют ту же работу, но мне нужно сделать это с помощью PHP .

К сожалению, я не могу использовать ImageMagick, потому что мой код находится на виртуальном хостинге без его установки.

в phpinfo() результат, что модуль phpinfo() не установлен.

Edit4 :

Срок действия награды истекает, в следующие дни давайте проведем несколько тестов с вашими ответами, может быть, есть решение только с PHP.

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

Обновленный ответ

У меня было немного больше времени, чтобы разработать полный код, чтобы ответить вам — я значительно упростил то, что у вас было, и, похоже, теперь он делает то, что вы хотите!

Результат

Оригинальный ответ

Я создал функцию PHP, чтобы извлечь альфа-канал из изображения, а затем применить этот альфа-канал к другому изображению.

Если вы примените скопированный альфа-канал к истинному цветному изображению, это позволит получить плавную альфу с 7-битным разрешением, т. Е. До 127. Если вы примените скопированный альфа-канал к палитризованному изображению, он пороговым будет на уровне 50% (вы можете изменить его), чтобы выходное изображение имело двоичную (вкл / выкл) альфа.

Итак, я извлек альфа из этого изображения — можно надеяться, что в середине есть альфа-наклон / градиент.

И применил скопированную альфу к этому изображению.

Там, где второе изображение было истинным цветом, альфа выглядит так:

Там, где второе изображение было в палитре, альфа выглядит так:

Код должен быть довольно понятным. Раскомментируйте операторы printf() содержащие DEBUG: для большого количества вывода:

Вот извлеченный альфа-слой, просто для удовольствия. Обратите внимание, что на самом деле это изображение в оттенках серого, представляющее альфа-канал — оно не имеет альфа-компонента.

Ключевые слова : PHP, gd, изображение, обработка изображений, альфа, альфа-слой, извлечение альфы, копирование альфы, применение альфы, замена альфы.

Вы можете сделать это довольно легко в ImageMagick, который распространяется в Linux и доступен для Windows и Mac OSX. Есть также много API, кроме командной строки. Вот как это сделать в командной строке ImageMagick.

PNG8: означает 256 цветов и двоичную прозрачность. Это означает либо полную, либо отсутствие прозрачности. Это вызывает алиасинг (ступеньки) по краям. Если вы хотите установить цвет фона вместо прозрачности, вы можете сохранить плавный (сглаженный) контур в результате. Так что на белом фоне.

ImageMagick работает под управлением PHP Imagick. Так что вы должны быть в состоянии сделать это с помощью PHP Imagick. Или вы можете вызвать командную строку ImageMagick из PHP exec ().

Илон Маск рекомендует:  Php простое кэширование
Понравилась статья? Поделиться с друзьями:
Кодинг, CSS и SQL