pikl 0.2.8-x86-mswin32 → 0.3.0-x86-mswin32
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/History.txt +9 -0
- data/License.txt +0 -0
- data/Manifest.txt +17 -17
- data/README.txt +0 -0
- data/config/hoe.rb +9 -6
- data/config/requirements.rb +0 -0
- data/ext/pikl/pikl.h +617 -465
- data/ext/pikl/pikl_affine.c +38 -91
- data/ext/pikl/pikl_affine.h +0 -0
- data/ext/pikl/pikl_bitmap.c +0 -0
- data/ext/pikl/pikl_bitmap.h +0 -0
- data/ext/pikl/pikl_blur.c +4 -8
- data/ext/pikl/pikl_blur.h +0 -0
- data/ext/pikl/pikl_camera.c +218 -0
- data/ext/pikl/{pikl_effect3.h → pikl_camera.h} +2 -2
- data/ext/pikl/pikl_composite.c +175 -0
- data/ext/pikl/pikl_composite.h +12 -0
- data/ext/pikl/pikl_decrease.c +110 -45
- data/ext/pikl/pikl_decrease.h +0 -7
- data/ext/pikl/pikl_divide.c +116 -0
- data/ext/pikl/pikl_divide.h +11 -0
- data/ext/pikl/pikl_effect.c +583 -151
- data/ext/pikl/pikl_effect.h +32 -6
- data/ext/pikl/pikl_enhance.c +274 -0
- data/ext/pikl/pikl_enhance.h +20 -0
- data/ext/pikl/pikl_io.c +174 -23
- data/ext/pikl/pikl_io.h +0 -0
- data/ext/pikl/pikl_jpeg.c +0 -0
- data/ext/pikl/pikl_jpeg.h +0 -0
- data/ext/pikl/pikl_pattern.c +383 -357
- data/ext/pikl/pikl_pattern.h +0 -0
- data/ext/pikl/pikl_pixel.c +173 -0
- data/ext/pikl/{pikl_trim.h → pikl_pixel.h} +2 -2
- data/ext/pikl/pikl_png.c +0 -0
- data/ext/pikl/pikl_png.h +0 -0
- data/ext/pikl/pikl_private.h +12 -5
- data/ext/pikl/pikl_resize.c +0 -0
- data/ext/pikl/pikl_resize.h +0 -0
- data/ext/pikl/pikl_rotate.c +409 -51
- data/ext/pikl/pikl_rotate.h +8 -0
- data/ext/pikl/pikl_scrap.c +263 -483
- data/ext/pikl/pikl_scrap.h +0 -0
- data/ext/pikl/pikl_special.c +168 -0
- data/ext/pikl/{pikl_effect4.h → pikl_special.h} +2 -2
- data/ext/pikl/pikl_voronoi.c +320 -0
- data/ext/pikl/pikl_voronoi.h +37 -0
- data/lib/pikl.rb +4 -2
- data/lib/pikl/color.rb +47 -0
- data/lib/pikl/const.rb +106 -22
- data/lib/pikl/errors.rb +0 -0
- data/lib/pikl/ext.rb +115 -8
- data/lib/pikl/filter.rb +371 -0
- data/lib/pikl/image.rb +124 -117
- data/lib/pikl/pikl.dll +0 -0
- data/lib/pikl/version.rb +2 -2
- data/setup.rb +0 -0
- data/test/sample.jpg +0 -0
- data/test/test_helper.rb +0 -0
- data/test/test_pikl_image.rb +0 -14
- data/test/test_pikl_image2.rb +541 -0
- metadata +35 -23
- data/ext/pikl/decrease/fsdither.h +0 -554
- data/ext/pikl/decrease/median.c +0 -1179
- data/ext/pikl/decrease/median.h +0 -7
- data/ext/pikl/decrease/neuquan5.c +0 -563
- data/ext/pikl/decrease/neuquant.h +0 -62
- data/ext/pikl/decrease/wu.c +0 -447
- data/ext/pikl/decrease/wu.h +0 -7
- data/ext/pikl/pikl_effect2.c +0 -240
- data/ext/pikl/pikl_effect2.h +0 -55
- data/ext/pikl/pikl_effect3.c +0 -266
- data/ext/pikl/pikl_effect4.c +0 -495
- data/ext/pikl/pikl_rotate2.c +0 -312
- data/ext/pikl/pikl_rotate2.h +0 -19
- data/ext/pikl/pikl_trim.c +0 -28
data/lib/pikl/image.rb
CHANGED
@@ -2,7 +2,7 @@ module Pikl
|
|
2
2
|
|
3
3
|
class Image
|
4
4
|
|
5
|
-
def self.open(inpath, &block)
|
5
|
+
def self.open(inpath, &block)
|
6
6
|
image = Pikl::Image.new(inpath)
|
7
7
|
image.instance_variable_set(:@block,block)
|
8
8
|
|
@@ -75,14 +75,10 @@ module Pikl
|
|
75
75
|
end
|
76
76
|
|
77
77
|
def rotate(angle, backcolor = "#FFFFFF", sample = :bilinear)
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
else
|
83
|
-
ci = color_int(backcolor)
|
84
|
-
Ext.pkl_rotate2(@pkl_image, angle.to_f, SAMPLES[sample.to_sym], ci[0], ci[1], ci[2], ci[3])
|
85
|
-
end
|
78
|
+
ci = color_int(backcolor)
|
79
|
+
color = Ext.pkl_color_rgb(ci[0], ci[1], ci[2])
|
80
|
+
Ext.pkl_rotate(@pkl_image, angle.to_f, SAMPLES[sample.to_sym], color)
|
81
|
+
Ext.pkl_color_close(color)
|
86
82
|
self
|
87
83
|
end
|
88
84
|
|
@@ -140,109 +136,6 @@ module Pikl
|
|
140
136
|
self.height <= self.width
|
141
137
|
end
|
142
138
|
|
143
|
-
# threshold=0-255
|
144
|
-
# threshold=0の時は変化しません
|
145
|
-
# threshold=255の時は全ての色にアンシャープ処理が働きます
|
146
|
-
# edge=-10 .. 10
|
147
|
-
# edge=0の時は変化しません
|
148
|
-
# edge>0の時は値が大きいほど先鋭化されます
|
149
|
-
# edge<0の時は値が小さいほどぼやけます
|
150
|
-
#
|
151
|
-
# 想定結果が得られる範囲は-10 .. 10程度です。
|
152
|
-
# これを超える場合は、品質の保証はありません
|
153
|
-
# ※画質によりこの通りではありません。-10..10の範囲より小さくなる可能性があります。
|
154
|
-
def unshapmask(threshold, edge)
|
155
|
-
Ext.pkl_unsharp(@pkl_image, threshold.to_i, edge.to_f)
|
156
|
-
self
|
157
|
-
end
|
158
|
-
|
159
|
-
# コントラスト調整
|
160
|
-
# コントラストを強くするということは、白い部分をより白く、
|
161
|
-
# 黒い部分をより黒くするような変換を意味します。
|
162
|
-
# 逆にコントラストを弱くした場合、白い部分と黒い部分の差が無くなり、灰色っぽい画像になります。
|
163
|
-
# <rate>
|
164
|
-
# 範囲:-127 .. 127
|
165
|
-
# rate=0の時は変化しません
|
166
|
-
# * rateが0以上の時は周波数によるコントラスト強調がおこなわれます
|
167
|
-
# * rateが0未満の時は直線的に平坦化されます
|
168
|
-
def contrast(rate)
|
169
|
-
Ext.pkl_contrast(@pkl_image, rate.to_f)
|
170
|
-
self
|
171
|
-
end
|
172
|
-
|
173
|
-
# レベル補正
|
174
|
-
# ヒストグラムの平坦化をおこないます。各色の分布に偏りがある画像に有効な場合があります。
|
175
|
-
# coeff = 平坦化時の係数です。1が標準です。1より小さい場合は暗く、1より大きい場合は明るくなります(0.0..2.0)
|
176
|
-
# low = 全ピクセル数に対して、切り捨てる暗い色の総数の割合(0-100%)
|
177
|
-
# high = 全ピクセル数に対して、切り捨てる明るい色の総数の割合(0-100%)
|
178
|
-
def level(low, high, coeff)
|
179
|
-
Ext.pkl_level(@pkl_image, low.to_f, high.to_f, coeff.to_f)
|
180
|
-
self
|
181
|
-
end
|
182
|
-
|
183
|
-
# 明るさ調整
|
184
|
-
# この明るさ調整は各色からcolor値を加算する単純な処理です。
|
185
|
-
# colorに255を指定すれば、ただの白い画像になります
|
186
|
-
# colorに-255を指定すると、ただの黒い画像になります。
|
187
|
-
def brightness(color)
|
188
|
-
Ext.pkl_brightness(@pkl_image, color.to_i)
|
189
|
-
self
|
190
|
-
end
|
191
|
-
|
192
|
-
# 輝度(明るさ)・彩度(鮮やかさ)・色相(色合い)調整
|
193
|
-
# * 具体的にどういうことかを理解したい場合は、mspaintの「色の編集」を見ると良いでしょう。
|
194
|
-
# ym(輝度) -1 .. 1(0.1で10%up).0では変化なし
|
195
|
-
# sm(彩度) -1 .. 1(0.1で10%up).0では変化なし
|
196
|
-
# hd(色相) 360.0度回転(R=113.2/Ye=173.0/G=225.0/Cy=293.2/B=353.0/Mg=45.0).360の倍数では変化なし
|
197
|
-
def hls(ym, sm ,hd)
|
198
|
-
Ext.pkl_hls(@pkl_image, ym.to_f, sm.to_f, hd.to_f)
|
199
|
-
self
|
200
|
-
end
|
201
|
-
|
202
|
-
# gamma correction
|
203
|
-
# _gm_ :: compensating rate.
|
204
|
-
# gm must be >= 0 and image is neutral if gm value is 1.0.
|
205
|
-
def gamma(gm)
|
206
|
-
Ext.pkl_gamma(@pkl_image, gm.to_f)
|
207
|
-
self
|
208
|
-
end
|
209
|
-
|
210
|
-
# mosaic effect
|
211
|
-
# _width_ :: width for mosaic unit.
|
212
|
-
# _height_ :: height for mosaic unit.
|
213
|
-
def mosaic(width, height)
|
214
|
-
Ext.pkl_mosaic(@pkl_image, width, height)
|
215
|
-
self
|
216
|
-
end
|
217
|
-
|
218
|
-
# compose image
|
219
|
-
# _image_ :: another pikl image object.
|
220
|
-
# _xpos_ :: left position of composing image.
|
221
|
-
# _ypos_ :: top position of composing image.
|
222
|
-
def compose(image, xpos, ypos)
|
223
|
-
Ext.pkl_composite(@pkl_image, image.rawdata, xpos, ypos)
|
224
|
-
self
|
225
|
-
end
|
226
|
-
|
227
|
-
# mediancut to decrease colors.
|
228
|
-
# _ncolors_ :: num of colors.(1..256)
|
229
|
-
# _dither_ :: dither. true/false
|
230
|
-
def mediancut(ncolors, dither)
|
231
|
-
dither = dither ? 1 : 0
|
232
|
-
Ext.pkl_mediancut(@pkl_image, 4, dither)
|
233
|
-
self
|
234
|
-
end
|
235
|
-
|
236
|
-
# alphablend
|
237
|
-
# _image_ :: another pikl image object.
|
238
|
-
# _xpos_ :: left position of blend image.
|
239
|
-
# _ypos_ :: top position of blend image.
|
240
|
-
# _alpha_ :: alpha: α-value(0-255). 255 is complete transparent.
|
241
|
-
def alphablend(image, xpos, ypos, alpha)
|
242
|
-
Ext.pkl_alphablend(@pkl_image, image.rawdata, xpos, ypos, alpha);
|
243
|
-
self
|
244
|
-
end
|
245
|
-
|
246
139
|
# regular expressions to try for identifying extensions
|
247
140
|
def split_extensions(path)
|
248
141
|
filename = path.split('/').last
|
@@ -267,11 +160,6 @@ module Pikl
|
|
267
160
|
error("left is outside the range. #{x}") if x > self.width.to_i
|
268
161
|
error("top is outside the range. #{y}") if y > self.height.to_i
|
269
162
|
end
|
270
|
-
|
271
|
-
def validate_rotate(angle)
|
272
|
-
validate_numeric(angle)
|
273
|
-
error("invalid angle. # => #{angle}") unless ROTATE_ANGLE.has_key?(angle)
|
274
|
-
end
|
275
163
|
|
276
164
|
def validate_resize(width, height)
|
277
165
|
validate_auto(width, height)
|
@@ -307,6 +195,125 @@ module Pikl
|
|
307
195
|
#self.close
|
308
196
|
raise Pikl::ParameterException.new(message)
|
309
197
|
end
|
198
|
+
|
199
|
+
|
200
|
+
##--soezimaster add.
|
201
|
+
# オープン済みファイルディスクリプタからPiklを生成する
|
202
|
+
def fdopen(fd)
|
203
|
+
self.close
|
204
|
+
error("invalid parameter. # => #{fd}") unless fd.class.name == 'File'
|
205
|
+
@pkl_image = Ext.pkl_fdopen(fd)
|
206
|
+
end
|
207
|
+
|
208
|
+
# 複製
|
209
|
+
def dup(src)
|
210
|
+
self.close
|
211
|
+
error("invalid parameter. # => #{src}") unless src.class.name == 'Pikl::Image'
|
212
|
+
@pkl_image = Ext.pkl_dup(src.rawdata)
|
213
|
+
end
|
214
|
+
|
215
|
+
# 新規のキャンバスを作成する
|
216
|
+
def canvas(width, height, colorspace, color)
|
217
|
+
self.close
|
218
|
+
error("invalid parameter. # => #{color}") if color.nil?
|
219
|
+
error("invalid parameter. # => #{color}") if color.class.name != 'Pikl::Color'
|
220
|
+
error("invalid parameter. # => #{colorspace}") unless COLORSPACE.include?(colorspace)
|
221
|
+
validate_pix(width)
|
222
|
+
validate_pix(height)
|
223
|
+
@pkl_image = Ext.pkl_canvas(width, height, COLORSPACE[colorspace], color.rawdata)
|
224
|
+
end
|
225
|
+
|
226
|
+
# オープン済みファイルディスクリプタ(もしくはIO)にイメージを書き出す
|
227
|
+
def output(fd, format, compress=nil)
|
228
|
+
raise Pikl::ImageProcessException.new("image already closed.") unless @pkl_image
|
229
|
+
error("invalid parameter. # => #{fd}") unless ['File', 'IO'].include?(fd.class.name)
|
230
|
+
validate_format(format)
|
231
|
+
if compress
|
232
|
+
validate_compress(compress)
|
233
|
+
Ext.pkl_compress(@pkl_image, compress.to_i)
|
234
|
+
end
|
235
|
+
|
236
|
+
Ext.pkl_output(@pkl_image, fd, EXTENSIONS_FORMATS[format.to_s.downcase] || format.to_i)
|
237
|
+
self.close unless(@block)
|
238
|
+
@pkl_image
|
239
|
+
end
|
240
|
+
|
241
|
+
# 色数を数える
|
242
|
+
def count
|
243
|
+
Ext.pkl_count(@pkl_image) if(@pkl_image)
|
244
|
+
end
|
245
|
+
|
246
|
+
# カラースペースを返す
|
247
|
+
def colorspace
|
248
|
+
nil unless(@pkl_image)
|
249
|
+
COLORSPACE.find{ |k, v|
|
250
|
+
v == Ext.pkl_colorspace(@pkl_image)
|
251
|
+
return k
|
252
|
+
}
|
253
|
+
end
|
254
|
+
|
255
|
+
# 特定ピクセルの色を取り出す
|
256
|
+
def getcolor(x, y, colormodel)
|
257
|
+
nil unless(@pkl_image)
|
258
|
+
validate_position(x, y)
|
259
|
+
error("invalid parameter. # => #{colormodel}") unless COLORMODEL.include?(colormodel)
|
260
|
+
Ext.pkl_get_color(@pkl_image, x, y, COLORMODEL[colormodel])
|
261
|
+
end
|
262
|
+
|
263
|
+
# 特定ピクセルに色をセットする
|
264
|
+
def setcolor(x, y, colormodel, color)
|
265
|
+
nil unless(@pkl_image)
|
266
|
+
validate_position(x, y)
|
267
|
+
error("invalid parameter. # => #{colormodel}") unless COLORMODEL.include?(colormodel)
|
268
|
+
validate_numeric(color)
|
269
|
+
error("invalid parameter. # => #{color}") unless color>=0 && color<=255
|
270
|
+
Ext.pkl_set_color(@pkl_image, x, y, COLORMODEL[colormodel], color)
|
271
|
+
end
|
272
|
+
|
273
|
+
# 特定ピクセルの色を取り出す
|
274
|
+
def getpixel(x, y)
|
275
|
+
return unless @pkl_image
|
276
|
+
validate_position(x, y)
|
277
|
+
color = Ext.pkl_get_pixel(self.rawdata, x, y)
|
278
|
+
|
279
|
+
case self.colorspace
|
280
|
+
when :GRAY
|
281
|
+
v = { 'gray' => Ext.pkl_color(color, COLORMODEL[:gray]) }
|
282
|
+
when :RGB
|
283
|
+
v = {
|
284
|
+
'red' => Ext.pkl_color(color, COLORMODEL[:red]),
|
285
|
+
'green' => Ext.pkl_color(color, COLORMODEL[:green]),
|
286
|
+
'blue' => Ext.pkl_color(color, COLORMODEL[:blue]) }
|
287
|
+
when :CMYK
|
288
|
+
v = {
|
289
|
+
'cyan' => Ext.pkl_color(color, COLORMODEL[:cyan]),
|
290
|
+
'magenta' => Ext.pkl_color(color, COLORMODEL[:magenta]),
|
291
|
+
'yellow' => Ext.pkl_color(color, COLORMODEL[:yellow]),
|
292
|
+
'black' => Ext.pkl_color(color, COLORMODEL[:black]) }
|
293
|
+
else
|
294
|
+
v=nil
|
295
|
+
end
|
296
|
+
Ext.pkl_color_close(color)
|
297
|
+
return v
|
298
|
+
end
|
299
|
+
|
300
|
+
# 特定ピクセルに色を設定する
|
301
|
+
def setpixel(x, y, color, auto=true)
|
302
|
+
return unless @pkl_image
|
303
|
+
validate_position(x, y)
|
304
|
+
error("invalid parameter. # => #{color}") if color.nil?
|
305
|
+
error("invalid parameter. # => #{color}") if color.class.name != 'Pikl::Color'
|
306
|
+
Ext.pkl_set_pixel(@pkl_image, x, y, color.rawdata)
|
307
|
+
color.close if(auto)
|
308
|
+
end
|
309
|
+
|
310
|
+
def validate_position(x, y)
|
311
|
+
validate_numeric(x)
|
312
|
+
validate_numeric(y)
|
313
|
+
error("value is outside the range. #{x}") if x<0 || x>=self.width
|
314
|
+
error("value is outside the range. #{y}") if y<0 || y>=self.height
|
315
|
+
end
|
316
|
+
|
310
317
|
end
|
311
318
|
end
|
312
319
|
|
data/lib/pikl/pikl.dll
CHANGED
Binary file
|
data/lib/pikl/version.rb
CHANGED
data/setup.rb
CHANGED
File without changes
|
data/test/sample.jpg
CHANGED
File without changes
|
data/test/test_helper.rb
CHANGED
File without changes
|
data/test/test_pikl_image.rb
CHANGED
@@ -313,20 +313,6 @@ class TestPiklImage < Test::Unit::TestCase
|
|
313
313
|
|
314
314
|
end
|
315
315
|
|
316
|
-
def test_validate_rotate
|
317
|
-
Pikl::Image.open(SAMPLE_IMAGE) do |img|
|
318
|
-
|
319
|
-
assert_raise(Pikl::ParameterException){img.validate_rotate(15)}
|
320
|
-
assert_nil(img.validate_rotate(0))
|
321
|
-
assert_nil(img.validate_rotate(90))
|
322
|
-
assert_nil(img.validate_rotate(180))
|
323
|
-
assert_nil(img.validate_rotate(270))
|
324
|
-
assert_nil(img.validate_rotate(360))
|
325
|
-
|
326
|
-
end
|
327
|
-
|
328
|
-
end
|
329
|
-
|
330
316
|
def test_validate_resize
|
331
317
|
Pikl::Image.open(SAMPLE_IMAGE) do |img|
|
332
318
|
|
@@ -0,0 +1,541 @@
|
|
1
|
+
require File.dirname(__FILE__) + '/test_helper.rb'
|
2
|
+
|
3
|
+
class TestPiklImage < Test::Unit::TestCase
|
4
|
+
|
5
|
+
SAMPLE_IMAGE = File.dirname(__FILE__) + '/sample.jpg'
|
6
|
+
SAMPLE_OUTPUT = File.dirname(__FILE__) + '/output.jpg'
|
7
|
+
TESTOUT_DIR = File.dirname(__FILE__) + '/out'
|
8
|
+
|
9
|
+
SAMPLE_IMAGE_W = 120
|
10
|
+
SAMPLE_IMAGE_H = 160
|
11
|
+
|
12
|
+
def setup
|
13
|
+
#out�̉����������I
|
14
|
+
end
|
15
|
+
|
16
|
+
def teardown
|
17
|
+
if File.exists? SAMPLE_OUTPUT
|
18
|
+
File.delete SAMPLE_OUTPUT
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
|
23
|
+
def test_fdopen
|
24
|
+
assert_raise(Pikl::ParameterException){
|
25
|
+
f = "test"
|
26
|
+
pk = Pikl::Image.new(Pikl::DEFAULT_IMAGE)
|
27
|
+
pk.fdopen(f)
|
28
|
+
pk.close
|
29
|
+
}
|
30
|
+
|
31
|
+
f = open(SAMPLE_IMAGE, "rb")
|
32
|
+
pk = Pikl::Image.new(Pikl::DEFAULT_IMAGE)
|
33
|
+
pk.fdopen(f)
|
34
|
+
pk.save(TESTOUT_DIR + "/fdopen.jpg");
|
35
|
+
pk.close
|
36
|
+
end
|
37
|
+
|
38
|
+
def test_dup
|
39
|
+
assert_raise(Pikl::ParameterException){
|
40
|
+
src = "test"
|
41
|
+
pk = Pikl::Image.new(Pikl::DEFAULT_IMAGE)
|
42
|
+
pk.dup(src)
|
43
|
+
pk.close
|
44
|
+
}
|
45
|
+
|
46
|
+
src = Pikl::Image.new(SAMPLE_IMAGE)
|
47
|
+
pk = Pikl::Image.new(Pikl::DEFAULT_IMAGE)
|
48
|
+
pk.dup(src)
|
49
|
+
src.close
|
50
|
+
pk.save(TESTOUT_DIR + "/dup.jpg");
|
51
|
+
pk.close
|
52
|
+
end
|
53
|
+
|
54
|
+
def test_canvas
|
55
|
+
pk = Pikl::Image.new(Pikl::DEFAULT_IMAGE)
|
56
|
+
pk.canvas(100, 100, :GRAY, Pikl::Color.gray(100))
|
57
|
+
pk.save(TESTOUT_DIR + "/canvas_gray.jpg")
|
58
|
+
pk.close
|
59
|
+
|
60
|
+
pk = Pikl::Image.new(Pikl::DEFAULT_IMAGE)
|
61
|
+
pk.canvas(100, 100, :RGB, Pikl::Color.rgb(0xff, 0xff, 0xff))
|
62
|
+
pk.save(TESTOUT_DIR + "/canvas_rgb.jpg")
|
63
|
+
pk.close
|
64
|
+
|
65
|
+
pk = Pikl::Image.new(Pikl::DEFAULT_IMAGE)
|
66
|
+
pk.canvas(100, 100, :CMYK, Pikl::Color.cmyk(0xff, 0, 0xff, 0xff))
|
67
|
+
pk.save(TESTOUT_DIR + "/canvas_cmyk.jpg")
|
68
|
+
pk.close
|
69
|
+
end
|
70
|
+
|
71
|
+
def test_output
|
72
|
+
f = open(TESTOUT_DIR+'/output.jpg', "wb")
|
73
|
+
pk = Pikl::Image.new(SAMPLE_IMAGE)
|
74
|
+
pk.output(f, pk.format)
|
75
|
+
#pk.output($stdout, pk.format)
|
76
|
+
pk.close
|
77
|
+
f.close
|
78
|
+
end
|
79
|
+
|
80
|
+
def test_count
|
81
|
+
pk = Pikl::Image.new(SAMPLE_IMAGE)
|
82
|
+
assert_equal(pk.count, 12979)
|
83
|
+
pk.close
|
84
|
+
end
|
85
|
+
|
86
|
+
def test_colorspace
|
87
|
+
pk = Pikl::Image.new(SAMPLE_IMAGE)
|
88
|
+
assert_equal(pk.colorspace, :RGB)
|
89
|
+
pk.close
|
90
|
+
end
|
91
|
+
|
92
|
+
def test_getcolor
|
93
|
+
pk = Pikl::Image.new(SAMPLE_IMAGE)
|
94
|
+
assert_equal(pk.getcolor(0, 0, :red), 207)
|
95
|
+
assert_equal(pk.getcolor(0, 0, :green), 206)
|
96
|
+
assert_equal(pk.getcolor(0, 0, :blue), 201)
|
97
|
+
pk.close
|
98
|
+
end
|
99
|
+
|
100
|
+
def test_setcolor
|
101
|
+
pk = Pikl::Image.new(SAMPLE_IMAGE)
|
102
|
+
for y in 0..100 do
|
103
|
+
for x in 0..100 do
|
104
|
+
pk.setcolor(x, y, :red, 255)
|
105
|
+
end
|
106
|
+
end
|
107
|
+
pk.save(TESTOUT_DIR + "/setcolor.jpg")
|
108
|
+
pk.close
|
109
|
+
end
|
110
|
+
|
111
|
+
def test_getpixel
|
112
|
+
pk = Pikl::Image.new(SAMPLE_IMAGE)
|
113
|
+
color = pk.getpixel(0,0)
|
114
|
+
assert_equal(color['red'], 207)
|
115
|
+
assert_equal(color['green'], 206)
|
116
|
+
assert_equal(color['blue'], 201)
|
117
|
+
pk.close
|
118
|
+
end
|
119
|
+
|
120
|
+
def test_setpixel
|
121
|
+
color = Pikl::Color.rgb(100,100,100)
|
122
|
+
pk = Pikl::Image.new(SAMPLE_IMAGE)
|
123
|
+
for y in 0..100 do
|
124
|
+
for x in 0..100 do
|
125
|
+
pk.setpixel(x, y, color, false)
|
126
|
+
end
|
127
|
+
end
|
128
|
+
pk.save(TESTOUT_DIR + "/setpixel.jpg")
|
129
|
+
pk.close
|
130
|
+
color.close
|
131
|
+
end
|
132
|
+
|
133
|
+
def test_invert
|
134
|
+
pk = Pikl::Image.new(SAMPLE_IMAGE)
|
135
|
+
pk.invert
|
136
|
+
pk.save(TESTOUT_DIR + "/invert.jpg")
|
137
|
+
pk.close
|
138
|
+
end
|
139
|
+
|
140
|
+
def test_alphaedge
|
141
|
+
pk = Pikl::Image.new(SAMPLE_IMAGE)
|
142
|
+
pk.alphaedge(8, 1.5, 1.5, 1.0, 30, 50)
|
143
|
+
pk.save(TESTOUT_DIR + "/alphaedge.jpg")
|
144
|
+
pk.close
|
145
|
+
end
|
146
|
+
|
147
|
+
def test_crayon
|
148
|
+
pk = Pikl::Image.new(SAMPLE_IMAGE)
|
149
|
+
pk.crayon
|
150
|
+
pk.save(TESTOUT_DIR + "/crayon.jpg")
|
151
|
+
pk.close
|
152
|
+
end
|
153
|
+
|
154
|
+
def test_edgeposter
|
155
|
+
pk = Pikl::Image.new(SAMPLE_IMAGE)
|
156
|
+
pk.edgeposter(4, 9.0, 9.0, 1.0, 1)
|
157
|
+
pk.save(TESTOUT_DIR + "/edgeposter.jpg")
|
158
|
+
pk.close
|
159
|
+
end
|
160
|
+
|
161
|
+
def test_hydrangea
|
162
|
+
pk = Pikl::Image.new(SAMPLE_IMAGE)
|
163
|
+
pk.hydrangea
|
164
|
+
pk.save(TESTOUT_DIR + "/hydrangea.jpg")
|
165
|
+
pk.close
|
166
|
+
end
|
167
|
+
|
168
|
+
def test_rinkaku
|
169
|
+
pk = Pikl::Image.new(SAMPLE_IMAGE)
|
170
|
+
pk.rinkaku
|
171
|
+
pk.save(TESTOUT_DIR + "/rinkaku.jpg")
|
172
|
+
pk.close
|
173
|
+
end
|
174
|
+
|
175
|
+
def test_voronoi_zone
|
176
|
+
pk = Pikl::Image.new(SAMPLE_IMAGE)
|
177
|
+
pk.voronoi_zone(5)
|
178
|
+
pk.save(TESTOUT_DIR + "/voronoi_zone.jpg")
|
179
|
+
pk.close
|
180
|
+
|
181
|
+
color = Pikl::Color.rgb(0, 0, 0)
|
182
|
+
pk = Pikl::Image.new(SAMPLE_IMAGE)
|
183
|
+
pk.voronoi_zone(5, color)
|
184
|
+
pk.save(TESTOUT_DIR + "/voronoi_zone_edge.jpg")
|
185
|
+
pk.close
|
186
|
+
color.close
|
187
|
+
|
188
|
+
end
|
189
|
+
|
190
|
+
def test_voronoi_count
|
191
|
+
pk = Pikl::Image.new(SAMPLE_IMAGE)
|
192
|
+
pk.voronoi_count(300)
|
193
|
+
pk.save(TESTOUT_DIR + "/voronoi_count.jpg")
|
194
|
+
pk.close
|
195
|
+
|
196
|
+
color = Pikl::Color.rgb(0, 0, 0)
|
197
|
+
pk = Pikl::Image.new(SAMPLE_IMAGE)
|
198
|
+
pk.voronoi_count(300, color)
|
199
|
+
pk.save(TESTOUT_DIR + "/voronoi_count_edge.jpg")
|
200
|
+
pk.close
|
201
|
+
color.close
|
202
|
+
end
|
203
|
+
|
204
|
+
def test_sepia
|
205
|
+
pk = Pikl::Image.new(SAMPLE_IMAGE)
|
206
|
+
pk.sepia(0.89, 0.8, 0.5)
|
207
|
+
pk.save(TESTOUT_DIR + "/sepia.jpg")
|
208
|
+
pk.close
|
209
|
+
end
|
210
|
+
|
211
|
+
def test_oilpaint
|
212
|
+
pk = Pikl::Image.new(SAMPLE_IMAGE)
|
213
|
+
pk.oilpaint(4)
|
214
|
+
pk.save(TESTOUT_DIR + "/oilpaint.jpg")
|
215
|
+
pk.close
|
216
|
+
end
|
217
|
+
|
218
|
+
def test_kuwahara
|
219
|
+
pk = Pikl::Image.new(SAMPLE_IMAGE)
|
220
|
+
pk.kuwahara(4)
|
221
|
+
pk.save(TESTOUT_DIR + "/kuwahara.jpg")
|
222
|
+
pk.close
|
223
|
+
end
|
224
|
+
|
225
|
+
def test_blot
|
226
|
+
pk = Pikl::Image.new(SAMPLE_IMAGE)
|
227
|
+
pk.blot(4)
|
228
|
+
pk.save(TESTOUT_DIR + "/blot.jpg")
|
229
|
+
pk.close
|
230
|
+
end
|
231
|
+
|
232
|
+
def test_vtr
|
233
|
+
pk = Pikl::Image.new(SAMPLE_IMAGE)
|
234
|
+
pk.vtr(3, 10, 10)
|
235
|
+
pk.save(TESTOUT_DIR + "/vtr.jpg")
|
236
|
+
pk.close
|
237
|
+
end
|
238
|
+
|
239
|
+
def test_dither
|
240
|
+
pk = Pikl::Image.new(SAMPLE_IMAGE)
|
241
|
+
pk.dither
|
242
|
+
pk.save(TESTOUT_DIR + "/dither.jpg")
|
243
|
+
pk.close
|
244
|
+
end
|
245
|
+
|
246
|
+
def test_edgepaint
|
247
|
+
pk = Pikl::Image.new(SAMPLE_IMAGE)
|
248
|
+
pk.edgepaint
|
249
|
+
pk.save(TESTOUT_DIR + "/edgepaint.jpg")
|
250
|
+
pk.close
|
251
|
+
end
|
252
|
+
|
253
|
+
def test_edge
|
254
|
+
pk = Pikl::Image.new(SAMPLE_IMAGE)
|
255
|
+
pk.edge
|
256
|
+
pk.save(TESTOUT_DIR + "/edge.jpg")
|
257
|
+
pk.close
|
258
|
+
end
|
259
|
+
|
260
|
+
def test_contour
|
261
|
+
pk = Pikl::Image.new(SAMPLE_IMAGE)
|
262
|
+
pk.contour
|
263
|
+
pk.save(TESTOUT_DIR + "/contour.jpg")
|
264
|
+
pk.close
|
265
|
+
end
|
266
|
+
|
267
|
+
def test_focus
|
268
|
+
pk = Pikl::Image.new(SAMPLE_IMAGE)
|
269
|
+
pk.focus
|
270
|
+
pk.save(TESTOUT_DIR + "/focus.jpg")
|
271
|
+
pk.close
|
272
|
+
end
|
273
|
+
|
274
|
+
def test_emboss
|
275
|
+
pk = Pikl::Image.new(SAMPLE_IMAGE)
|
276
|
+
pk.emboss
|
277
|
+
pk.save(TESTOUT_DIR + "/emboss.jpg")
|
278
|
+
pk.close
|
279
|
+
end
|
280
|
+
|
281
|
+
def test_custom_emboss
|
282
|
+
mask = [-1, -1, -1,
|
283
|
+
-1, 8, -1,
|
284
|
+
-1, -1, -1]
|
285
|
+
pk = Pikl::Image.new(SAMPLE_IMAGE)
|
286
|
+
pk.emboss2(mask, 3, 3)
|
287
|
+
pk.save(TESTOUT_DIR + "/custom_emboss.jpg")
|
288
|
+
pk.close
|
289
|
+
end
|
290
|
+
|
291
|
+
def test_noisecut
|
292
|
+
pk = Pikl::Image.new(SAMPLE_IMAGE)
|
293
|
+
pk.noisecut
|
294
|
+
pk.save(TESTOUT_DIR + "/noisecut.jpg")
|
295
|
+
pk.close
|
296
|
+
end
|
297
|
+
|
298
|
+
def test_blur
|
299
|
+
pk = Pikl::Image.new(SAMPLE_IMAGE)
|
300
|
+
pk.blur(3)
|
301
|
+
pk.save(TESTOUT_DIR + "/blur.jpg")
|
302
|
+
pk.close
|
303
|
+
|
304
|
+
pk = Pikl::Image.new(SAMPLE_IMAGE)
|
305
|
+
pk.gaussblur(3.0)
|
306
|
+
pk.save(TESTOUT_DIR + "/gaussblur.jpg")
|
307
|
+
pk.close
|
308
|
+
|
309
|
+
pk = Pikl::Image.new(SAMPLE_IMAGE)
|
310
|
+
pk.rblur
|
311
|
+
pk.save(TESTOUT_DIR + "/rblur.jpg")
|
312
|
+
pk.close
|
313
|
+
|
314
|
+
pk = Pikl::Image.new(SAMPLE_IMAGE)
|
315
|
+
pk.ablur
|
316
|
+
pk.save(TESTOUT_DIR + "/ablur.jpg")
|
317
|
+
pk.close
|
318
|
+
|
319
|
+
pk = Pikl::Image.new(SAMPLE_IMAGE)
|
320
|
+
pk.wblur
|
321
|
+
pk.save(TESTOUT_DIR + "/wblur.jpg")
|
322
|
+
pk.close
|
323
|
+
|
324
|
+
pk = Pikl::Image.new(SAMPLE_IMAGE)
|
325
|
+
pk.mblur(30.0, 5)
|
326
|
+
pk.save(TESTOUT_DIR + "/mblur.jpg")
|
327
|
+
pk.close
|
328
|
+
end
|
329
|
+
|
330
|
+
def test_shadowframe
|
331
|
+
pk = Pikl::Image.new(SAMPLE_IMAGE)
|
332
|
+
pk.shadowframe(10)
|
333
|
+
pk.save(TESTOUT_DIR + "/shadowframe.jpg")
|
334
|
+
pk.close
|
335
|
+
end
|
336
|
+
|
337
|
+
def test_randomshadow
|
338
|
+
pk = Pikl::Image.new(SAMPLE_IMAGE)
|
339
|
+
|
340
|
+
canvas = Pikl::Image.new(Pikl::DEFAULT_IMAGE)
|
341
|
+
canvas.canvas(300, 300, :RGB, Pikl::Color.rgb(0xff, 0xff, 0xff))
|
342
|
+
|
343
|
+
canvas.randomshadow(pk, 100, 100, 10)
|
344
|
+
canvas.randomshadow(pk, 50, 50, 10)
|
345
|
+
canvas.randomshadow(pk, 0, 0, 10)
|
346
|
+
|
347
|
+
canvas.save(TESTOUT_DIR + "/randomshadow.jpg")
|
348
|
+
canvas.close
|
349
|
+
pk.close
|
350
|
+
end
|
351
|
+
|
352
|
+
|
353
|
+
def test_color_emboss
|
354
|
+
pk = Pikl::Image.new(SAMPLE_IMAGE)
|
355
|
+
pk.color_emboss(100, 70)
|
356
|
+
pk.save(TESTOUT_DIR + "/color_emboss.jpg")
|
357
|
+
pk.close
|
358
|
+
end
|
359
|
+
|
360
|
+
def test_pixelate
|
361
|
+
pk = Pikl::Image.new(SAMPLE_IMAGE)
|
362
|
+
pk.pixelate(2)
|
363
|
+
pk.save(TESTOUT_DIR + "/pixelate.jpg")
|
364
|
+
pk.close
|
365
|
+
end
|
366
|
+
|
367
|
+
def test_grid
|
368
|
+
pk = Pikl::Image.new(SAMPLE_IMAGE)
|
369
|
+
pk.grid(5, 5, 100)
|
370
|
+
pk.save(TESTOUT_DIR + "/grid.jpg")
|
371
|
+
pk.close
|
372
|
+
end
|
373
|
+
|
374
|
+
def test_posterize
|
375
|
+
pk = Pikl::Image.new(SAMPLE_IMAGE)
|
376
|
+
pk.posterize(8)
|
377
|
+
pk.save(TESTOUT_DIR + "/posterize.jpg")
|
378
|
+
pk.close
|
379
|
+
end
|
380
|
+
|
381
|
+
def test_cutcolor
|
382
|
+
pk = Pikl::Image.new(SAMPLE_IMAGE)
|
383
|
+
pk.cutcolor(0b10101100)
|
384
|
+
pk.save(TESTOUT_DIR + "/cutcolor.jpg")
|
385
|
+
pk.close
|
386
|
+
end
|
387
|
+
|
388
|
+
def test_gray
|
389
|
+
pk = Pikl::Image.new(SAMPLE_IMAGE)
|
390
|
+
pk.gray
|
391
|
+
pk.save(TESTOUT_DIR + "/gray.jpg")
|
392
|
+
pk.close
|
393
|
+
|
394
|
+
pk = Pikl::Image.new(TESTOUT_DIR + "/gray.jpg")
|
395
|
+
pk.blackwhite
|
396
|
+
pk.save(TESTOUT_DIR + "/blackwhite.jpg")
|
397
|
+
pk.close
|
398
|
+
end
|
399
|
+
|
400
|
+
def test_tileslit
|
401
|
+
pk = Pikl::Image.new(SAMPLE_IMAGE)
|
402
|
+
pk.tileslit(10,5)
|
403
|
+
pk.save(TESTOUT_DIR + "/tileslit.jpg")
|
404
|
+
pk.close
|
405
|
+
end
|
406
|
+
|
407
|
+
def test_splitframe
|
408
|
+
color = Pikl::Color.rgb(200,100,255)
|
409
|
+
pk = Pikl::Image.new(SAMPLE_IMAGE)
|
410
|
+
pk.splitframe(color, 5, 5, 3, 2)
|
411
|
+
pk.save(TESTOUT_DIR + "/splitframe.jpg")
|
412
|
+
pk.close
|
413
|
+
end
|
414
|
+
|
415
|
+
def test_vignette
|
416
|
+
color = Pikl::Color.rgb(0,0,0)
|
417
|
+
pk = Pikl::Image.new(SAMPLE_IMAGE)
|
418
|
+
pk.vignette(color, 50, 80)
|
419
|
+
pk.save(TESTOUT_DIR + "/vignette.jpg")
|
420
|
+
pk.close
|
421
|
+
color.close
|
422
|
+
end
|
423
|
+
|
424
|
+
def test_vaseline
|
425
|
+
pk = Pikl::Image.new(SAMPLE_IMAGE)
|
426
|
+
pk.vaseline(80)
|
427
|
+
pk.save(TESTOUT_DIR + "/vaseline.jpg")
|
428
|
+
pk.close
|
429
|
+
end
|
430
|
+
|
431
|
+
def test_vv
|
432
|
+
color = Pikl::Color.rgb(0,0,0)
|
433
|
+
pk = Pikl::Image.new(SAMPLE_IMAGE)
|
434
|
+
pk.vv(color, 50, 80)
|
435
|
+
pk.save(TESTOUT_DIR + "/vv.jpg")
|
436
|
+
pk.close
|
437
|
+
color.close
|
438
|
+
end
|
439
|
+
|
440
|
+
def test_film
|
441
|
+
color = Pikl::Color.rgb(200,100,150)
|
442
|
+
pk = Pikl::Image.new(SAMPLE_IMAGE)
|
443
|
+
pk.film(color, 30)
|
444
|
+
pk.save(TESTOUT_DIR + "/film.jpg")
|
445
|
+
pk.close
|
446
|
+
color.close
|
447
|
+
end
|
448
|
+
|
449
|
+
def test_swirl
|
450
|
+
color = Pikl::Color.rgb(200,100,150)
|
451
|
+
pk = Pikl::Image.new(SAMPLE_IMAGE)
|
452
|
+
pk.swirl(0.005, -1, -1, color)
|
453
|
+
pk.save(TESTOUT_DIR + "/swirl.jpg")
|
454
|
+
pk.close
|
455
|
+
color.close
|
456
|
+
end
|
457
|
+
|
458
|
+
def test_wave
|
459
|
+
pk = Pikl::Image.new(SAMPLE_IMAGE)
|
460
|
+
pk.wave(15.0, 5.0)
|
461
|
+
pk.save(TESTOUT_DIR + "/wave.jpg")
|
462
|
+
pk.close
|
463
|
+
end
|
464
|
+
|
465
|
+
def test_dots
|
466
|
+
color = Pikl::Color.rgb(200,100,150)
|
467
|
+
pk = Pikl::Image.new(SAMPLE_IMAGE)
|
468
|
+
pk.dots(3, color)
|
469
|
+
pk.save(TESTOUT_DIR + "/dots.jpg")
|
470
|
+
pk.close
|
471
|
+
color.close
|
472
|
+
end
|
473
|
+
|
474
|
+
def test_colordither
|
475
|
+
pk = Pikl::Image.new(SAMPLE_IMAGE)
|
476
|
+
pk.colordither(50)
|
477
|
+
pk.save(TESTOUT_DIR + "/colordither.jpg")
|
478
|
+
pk.close
|
479
|
+
end
|
480
|
+
|
481
|
+
def test_fantasy
|
482
|
+
pk = Pikl::Image.new(SAMPLE_IMAGE)
|
483
|
+
pk.fantasy(1, 0.5, 1.0, 0)
|
484
|
+
pk.save(TESTOUT_DIR + "/fantasy.jpg")
|
485
|
+
pk.close
|
486
|
+
end
|
487
|
+
|
488
|
+
def test_illust
|
489
|
+
pk = Pikl::Image.new(SAMPLE_IMAGE)
|
490
|
+
pk.illust(50,20,50)
|
491
|
+
pk.save(TESTOUT_DIR + "/illust.jpg")
|
492
|
+
pk.close
|
493
|
+
end
|
494
|
+
|
495
|
+
def test_pattern
|
496
|
+
pk = Pikl::Image.new(SAMPLE_IMAGE)
|
497
|
+
pk.pattern(3,9)
|
498
|
+
pk.save(TESTOUT_DIR + "/pattern.jpg")
|
499
|
+
pk.close
|
500
|
+
end
|
501
|
+
|
502
|
+
def test_tile
|
503
|
+
pk = Pikl::Image.new(SAMPLE_IMAGE)
|
504
|
+
pk.tile(5,5,50)
|
505
|
+
pk.save(TESTOUT_DIR + "/tile.jpg")
|
506
|
+
pk.close
|
507
|
+
end
|
508
|
+
|
509
|
+
def test_affine
|
510
|
+
color = Pikl::Color.rgb(200,100,150)
|
511
|
+
pk = Pikl::Image.new(SAMPLE_IMAGE)
|
512
|
+
pk.affine(300, 300, color, 2.0, 2.0, 30.0, 50, 50)
|
513
|
+
pk.save(TESTOUT_DIR + "/affine.jpg")
|
514
|
+
pk.close
|
515
|
+
color.close
|
516
|
+
end
|
517
|
+
|
518
|
+
|
519
|
+
def test_special
|
520
|
+
Pikl::Image.open(SAMPLE_IMAGE) do |img|
|
521
|
+
img.posterize(8)
|
522
|
+
img.noisecut
|
523
|
+
|
524
|
+
img2 = Pikl::Image.new(Pikl::DEFAULT_IMAGE)
|
525
|
+
img2.dup(img)
|
526
|
+
img2.level(5.0, 5.0, 1.0)
|
527
|
+
|
528
|
+
img.brightness(50)
|
529
|
+
img.edge(30)
|
530
|
+
|
531
|
+
img.alphablend(img2, 0, 0, 70)
|
532
|
+
|
533
|
+
img.save(TESTOUT_DIR + "/special.jpg")
|
534
|
+
img.close
|
535
|
+
img2.close
|
536
|
+
end
|
537
|
+
end
|
538
|
+
|
539
|
+
end
|
540
|
+
|
541
|
+
|