Packages

A pure Elixir blurhash decoder/encoder.

Current section

Files

Jump to
rinpatch_blurhash lib blurhash utils.ex
Raw

lib/blurhash/utils.ex

defmodule Blurhash.Utils do
def srgb_to_linear(srgb_color) do
value = srgb_color / 255
if value <= 0.04045,
do: value / 12.92,
else: :math.pow((value + 0.055) / 1.055, 2.4)
end
def linear_to_srgb(linear_color) do
value = max(0, min(1, linear_color))
if value <= 0.0031308,
do: round(value * 12.92 * 255 + 0.5),
else: round((1.055 * :math.pow(value, 1 / 2.4) - 0.055) * 255 + 0.5)
end
defp sign_pow(value, exponent) do
sign =
if value < 0,
do: -1,
else: 1
sign * :math.pow(abs(value), exponent)
end
def unquantize_color(quantized_color, max_ac),
do: sign_pow((quantized_color - 9) / 9, 2) * max_ac
def quantize_color(color, max_ac) do
value = floor(sign_pow(color / max_ac, 0.5) * 9 + 9.5)
cond do
value > 18 -> 18
value < 0 -> 0
true -> value
end
end
end