Как получить вставленные изображения с прозрачностью в Javascript - PullRequest
0 голосов
/ 07 мая 2018

При обнаружении вставленных изображений с использованием event.clipboardData альфа-канал теряется. Очевидно, это связано с тем, что Windows хранит изображения в буфере обмена как 24-битные растровые изображения.

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

Вот детектор вставленных изображений, который я написал недавно:
http://12Me21.github.io/paste/

1 Ответ

0 голосов
/ 07 мая 2018

Я на самом деле тщательно исследовал тему прозрачности в буфере обмена Windows, поэтому, хотя я не очень разбираюсь в javascript, я могу помочь вам вместе с принципами.

Буфер обмена работает с системой строковых идентификаторов для их типов буфера обмена, и вы можете поместить несколько таких типов в буфер обмена одновременно. В последние годы многие приложения (включая MS Office и Gimp) начали использовать тип "PNG" для прозрачных изображений, который будет содержать необработанный поток байтов с байтами для изображения png.

Тем не менее, гораздо более часто используемым является формат DIB с идентификатором буфера обмена «DeviceIndependentBitmap», который может быть ... проблематичным. Как и в формате PNG, это необработанный поток байтов, но формат файла немного беспорядочный. Для получения дополнительной информации о формате DIB я советую вам прочитать этот вопрос и ответ, который я дал на него , а также Независимые от устройства растровые спецификации и BITMAPINFOHEADER struct на MSDN. Короче говоря, это 32-битный формат RGB, который злоупотребляет как (а иногда и ошибочно) ARGB. Я понятия не имею, насколько правдоподобно анализировать DIB в пригодное для использования изображение в Javascript, однако многие программы (включая Google Chrome), похоже, используют его в качестве только прозрачного формата изображения, который они помещают в буфер обмена при копировании изображения.

Для полной поддержки прозрачного вставки вам, вероятно, потребуется поддержка форматов PNG и DIB (и, учитывая проблемы и разногласия, связанные с DIB, предпочтительно в таком порядке). Этот ответ может дать больше информации об общем методе просеивания через буфер обмена и синтаксического анализа изображений PNG и DIB, хотя это код C #, а не Javascript.

...