windows - Sådan får du indsat billeder med gennemsigtighed i Javascript

Indlæg af Hanne Mølgaard Plasc

Problem



Når du registrerer indsatte billeder ved hjælp af event.clipboardData, går alfakanalen tabt. Det skyldes tilsyneladende, at Windows gemmer billeder i udklipsholderen som 24-bit bitmaps.


Jeg har hørt, at nogle programmer gemmer gennemsigtighedsdataene for kopierede billeder separat, men jeg kan ikke finde ud af om dette kan nås via clipboardData.


Her er en klistret billedetektor, som jeg skrev for et stykke tid siden:

http://12Me21.github.io/paste/[3]

Bedste reference


Jeg har faktisk undersøgt emnet for gennemsigtighed på Windows-udklipsholderen meget, så jeg kan ikke hjælpe med javascript, selvom jeg ikke virkelig har erfaring med principperne.


Udklipsholderen arbejder med et system med streng-id'er for deres udklipsholder, og du kan sætte flere sådanne typer på udklipsholderen samtidigt. I de seneste år er mange applikationer (herunder MS Office og Gimp) begyndt at bruge typen 'PNG' til gennemsigtige billeder, som vil indeholde en raw byte stream med bytes for et png-billede.


En meget mere almindeligt anvendt er imidlertid DIB-formatet, som har clipboard-id 'DeviceIndependentBitmap', og at man kan være ... problematisk. Ligesom PNG-en er det en rå byte-strøm, men det faktiske filformat er lidt af et rod. For mere information om DIB-format anbefaler jeg dig at læse dette spørgsmål og svaret jeg gav til det, og Device Independent Bitmap-specifikationerne og BITMAPINFOHEADER struct på MSDN. Lang historie kort, det er et 32bpp RGB-format, der misbruges som (og nogle gange forveksles med) ARGB. Jeg har ingen anelse om, hvor plausibel det er at analysere DIB i et brugbart billede i Javascript, men mange programmer (herunder Google Chrome) synes at bruge det som kun gennemsigtigt billedformat, som de lægger på udklipsholderen, når de kopierer et billede. [5] [6]


For fuldt ud at understøtte gennemsigtig klipning skal du nok understøtte både PNG- og DIB-formaterne (og givet problemerne og kontroverserne omkring DIB, helst i den rækkefølge). Dette svar kan give mere information om den generelle metode til at sive gennem klippebordet og analysere PNG- og DIB-billederne, selv om det er C # -koden og ikke Javascript.