pikl 0.2.8 → 0.3.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (75) hide show
  1. data/History.txt +9 -0
  2. data/License.txt +0 -0
  3. data/Manifest.txt +17 -17
  4. data/README.txt +0 -0
  5. data/config/hoe.rb +9 -6
  6. data/config/requirements.rb +0 -0
  7. data/ext/pikl/extconf.rb +0 -0
  8. data/ext/pikl/pikl.h +617 -465
  9. data/ext/pikl/pikl_affine.c +38 -91
  10. data/ext/pikl/pikl_affine.h +0 -0
  11. data/ext/pikl/pikl_bitmap.c +0 -0
  12. data/ext/pikl/pikl_bitmap.h +0 -0
  13. data/ext/pikl/pikl_blur.c +4 -8
  14. data/ext/pikl/pikl_blur.h +0 -0
  15. data/ext/pikl/pikl_camera.c +218 -0
  16. data/ext/pikl/{pikl_effect3.h → pikl_camera.h} +2 -2
  17. data/ext/pikl/pikl_composite.c +175 -0
  18. data/ext/pikl/pikl_composite.h +12 -0
  19. data/ext/pikl/pikl_decrease.c +110 -45
  20. data/ext/pikl/pikl_decrease.h +0 -7
  21. data/ext/pikl/pikl_divide.c +116 -0
  22. data/ext/pikl/pikl_divide.h +11 -0
  23. data/ext/pikl/pikl_effect.c +583 -151
  24. data/ext/pikl/pikl_effect.h +32 -6
  25. data/ext/pikl/pikl_enhance.c +274 -0
  26. data/ext/pikl/pikl_enhance.h +20 -0
  27. data/ext/pikl/pikl_io.c +174 -23
  28. data/ext/pikl/pikl_io.h +0 -0
  29. data/ext/pikl/pikl_jpeg.c +0 -0
  30. data/ext/pikl/pikl_jpeg.h +0 -0
  31. data/ext/pikl/pikl_pattern.c +383 -357
  32. data/ext/pikl/pikl_pattern.h +0 -0
  33. data/ext/pikl/pikl_pixel.c +173 -0
  34. data/ext/pikl/{pikl_trim.h → pikl_pixel.h} +2 -2
  35. data/ext/pikl/pikl_png.c +0 -0
  36. data/ext/pikl/pikl_png.h +0 -0
  37. data/ext/pikl/pikl_private.h +12 -5
  38. data/ext/pikl/pikl_resize.c +0 -0
  39. data/ext/pikl/pikl_resize.h +0 -0
  40. data/ext/pikl/pikl_rotate.c +409 -51
  41. data/ext/pikl/pikl_rotate.h +8 -0
  42. data/ext/pikl/pikl_scrap.c +263 -483
  43. data/ext/pikl/pikl_scrap.h +0 -0
  44. data/ext/pikl/pikl_special.c +168 -0
  45. data/ext/pikl/{pikl_effect4.h → pikl_special.h} +2 -2
  46. data/ext/pikl/pikl_voronoi.c +320 -0
  47. data/ext/pikl/pikl_voronoi.h +37 -0
  48. data/lib/pikl.rb +4 -2
  49. data/lib/pikl/color.rb +47 -0
  50. data/lib/pikl/const.rb +106 -22
  51. data/lib/pikl/errors.rb +0 -0
  52. data/lib/pikl/ext.rb +115 -8
  53. data/lib/pikl/filter.rb +371 -0
  54. data/lib/pikl/image.rb +124 -117
  55. data/lib/pikl/version.rb +2 -2
  56. data/setup.rb +0 -0
  57. data/test/sample.jpg +0 -0
  58. data/test/test_helper.rb +0 -0
  59. data/test/test_pikl_image.rb +0 -14
  60. data/test/test_pikl_image2.rb +541 -0
  61. metadata +35 -23
  62. data/ext/pikl/decrease/fsdither.h +0 -554
  63. data/ext/pikl/decrease/median.c +0 -1179
  64. data/ext/pikl/decrease/median.h +0 -7
  65. data/ext/pikl/decrease/neuquan5.c +0 -563
  66. data/ext/pikl/decrease/neuquant.h +0 -62
  67. data/ext/pikl/decrease/wu.c +0 -447
  68. data/ext/pikl/decrease/wu.h +0 -7
  69. data/ext/pikl/pikl_effect2.c +0 -240
  70. data/ext/pikl/pikl_effect2.h +0 -55
  71. data/ext/pikl/pikl_effect3.c +0 -266
  72. data/ext/pikl/pikl_effect4.c +0 -495
  73. data/ext/pikl/pikl_rotate2.c +0 -312
  74. data/ext/pikl/pikl_rotate2.h +0 -19
  75. data/ext/pikl/pikl_trim.c +0 -28
@@ -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
- if ROTATE_ANGLE.has_key?(angle.to_i)
80
- validate_rotate(angle)
81
- Ext.pkl_rotate(@pkl_image, ROTATE_ANGLE[angle.to_i])
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
 
@@ -1,8 +1,8 @@
1
1
  module Pikl #:nodoc:
2
2
  module VERSION #:nodoc:
3
3
  MAJOR = 0
4
- MINOR = 2
5
- TINY = 8
4
+ MINOR = 3
5
+ TINY = 0
6
6
 
7
7
  STRING = [MAJOR, MINOR, TINY].join('.')
8
8
  end
data/setup.rb CHANGED
File without changes
File without changes
File without changes
@@ -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
+