1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
|
#! /usr/bin/env python
# -*- coding: utf-8 -*-
# Allows saving (TODO: and loading) CSS gradient files
# Copyright (C) 2011 João S. O. Bueno <gwidion@gmail.com>
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 3 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program. If not, see <https://www.gnu.org/licenses/>.
# Currently this exports all color segments as RGB linear centered segments.
# TODO: Respect gradient alpha, off-center segments, different blending
# functions and HSV colors
from gimpfu import *
gettext.install("gimp20-python", gimp.locale_directory, unicode=True)
w3c_template = """background-image: linear-gradient(top, %s);\n"""
moz_template = """background-image: -moz-linear-gradient(center top, %s);\n"""
webkit_template = """background-image: -webkit-gradient(linear, """ \
"""left top, left bottom, %s);\n"""
color_to_html = lambda c: "rgb(%d,%d,%d)" % tuple(c)[:3]
def format_text(text):
counter = 0
new_text = []
for token in text.split(","):
if counter + len(token) > 77:
token = "\n " + token
counter = 4
new_text.append(token)
if "\n" in token:
counter = len(token.rsplit("\n")[-1]) + 1
else:
counter += len(token) + 1
return ",".join(new_text)
def gradient_css_save(gradient, file_name):
stops = []
wk_stops = []
n_segments = pdb.gimp_gradient_get_number_of_segments(gradient)
last_stop = None
for index in xrange(n_segments):
lcolor, lopacity = pdb.gimp_gradient_segment_get_left_color(
gradient,
index)
rcolor, ropacity = pdb.gimp_gradient_segment_get_right_color(
gradient,
index)
lpos = pdb.gimp_gradient_segment_get_left_pos(gradient, index)
rpos = pdb.gimp_gradient_segment_get_right_pos(gradient, index)
lstop = color_to_html(lcolor) + " %d%%" % int(100 * lpos)
wk_lstop = "color-stop(%.03f, %s)" %(lpos, color_to_html(lcolor))
if lstop != last_stop:
stops.append(lstop)
wk_stops.append(wk_lstop)
rstop = color_to_html(rcolor) + " %d%%" % int(100 * rpos)
wk_rstop = "color-stop(%.03f, %s)" %(rpos, color_to_html(rcolor))
stops.append(rstop)
wk_stops.append(wk_rstop)
last_stop = rstop
final_text = w3c_template % ", ".join(stops)
final_text += moz_template % ",".join(stops)
final_text += webkit_template % ",".join(wk_stops)
with open(file_name, "wt") as file_:
file_.write(format_text(final_text))
register(
"gradient-save-as-css",
"Creates a new palette from a given gradient",
"palette_from_gradient (gradient, number, segment_colors) -> None",
"Joao S. O. Bueno",
"(c) GPL V3.0 or later",
"2011",
"Save as CSS...",
"",
[
(PF_GRADIENT, "gradient", N_("Gradient to use"),""),
(PF_FILENAME, "file_name", N_("File Name"), ""),
],
[],
gradient_css_save,
menu="<Gradients>",
domain=("gimp20-python", gimp.locale_directory)
)
main()
|