Farbdefinition aus HEX-Code erstellen

Von admin. | 30 Oktober, 2018 - 13:26
Kurzbeschreibung:

Wenn man z. B. "Web-Farben" in RagTime nutzen will, ist es schwierig die dort verwendeten hexadezimalen Werte in eine RagTime-Farbe umzurechnen. Dieses Skript automatisiert die Farbdefinition.

Ausführliche Beschreibung:

Wenn man eine HTML-Farbdefinition wie "DarkOrange" in RagTime nutzen will, kennt man in der Regel den dazugehörigen HEX-Code der Farbe (hier "FF8C00"), in der die RGB-Werte hexadezimal von 0 bis 255 angegeben sind.

Eine RagTime-Farbe wird aber über den Farbraum (RGB, CMYK, …) definiert, deren Kanäle von 0 bis 100% angegeben werden.

Da die Umrechnung nicht ganz einfach ist, habe ich ein AppleScript geschrieben, dass diesen Vorgang automatisiert.

Nachdem das Skript im Extras-Menü -> AppleScript -> "Insert HEX Color" gestartet wurde, fragt es nach einer Farbkodierung (z.B. FF8C00) und legt dann eine neue Farbe mit dem Namen "FF8C00" und den RGB-Werten Rot=100%, Grün=55% und Blau=0% an. Die Farbe erscheint dann im Farbwähler unter "Benannte Farben" bzw. unter Fenster-Menü -> Hilfsmittel -> Farben.

Das hier angehängten RagTime-Dokument enthält dieses Skript.

Hier der Code zum Anschauen:

property hexString : "0123456789ABCDEF"

on hex2dec(hex)
((offset of (item 1 of hex) in hexString) - 1) * 16 + (offset of (item 2 of hex) in hexString) - 1
end hex2dec

on hex2Color(hexValue)
if (count hexValue) ≠ 6 then
tell application "System Events"
set dlgResult to display dialog "Hex string is not 6 characters long!" with title "Error" buttons {"Stop"} default button 1
return ""
end tell
end if
repeat with i from 1 to 6
if not (hexString contains (character i of hexValue)) then
tell application "System Events"
set dlgResult to display dialog "Hex string contains illegal characters!" with title "Error" buttons {"Stop"} default button 1
end tell
return ""
end if
end repeat

set R to hex2dec(character 1 of hexValue & character 2 of hexValue)
set G to hex2dec(character 3 of hexValue & character 4 of hexValue)
set B to hex2dec(character 5 of hexValue & character 6 of hexValue)
-- hex is 0-255, colors are 0-100% so recalcluate the values and round it
set R to round (R / 255 * 1000) / 10
set G to round (G / 255 * 1000) / 10
set B to round (B / 255 * 1000) / 10

return {R, G, B}
end hex2Color

on run
tell application "System Events"
set dlgResult to display dialog "Enter Hex Code:" with title "Create new named color for RagTime" default answer "" buttons {"Cancel", "Ok"} default button 2 cancel button 1
end tell
if button returned of dlgResult = "Cancel" then return
set hexColor to text returned of dlgResult
set rtColor to hex2Color(hexColor)
if rtColor = "" then return
tell document 1
make new named color with properties {name:hexColor, kind:process, color:{red:item 1 of rtColor, green:item 2 of rtColor, blue:item 3 of rtColor}} at end
end tell
end run

Anhang Größe
InserHexColor.rtd 41.5 KB