pikl 0.1.0

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 ADDED
@@ -0,0 +1,4 @@
1
+ == 0.1.0 2008-04-08
2
+
3
+ * 1 major enhancement:
4
+ * Initial release
data/License.txt ADDED
@@ -0,0 +1,21 @@
1
+ Copyright (c) 2008 pikl Ryota Maruko
2
+ Copyright (c) 2008 libpikl Keiko Soejima
3
+
4
+ Permission is hereby granted, free of charge, to any person obtaining
5
+ a copy of this software and associated documentation files (the
6
+ "Software"), to deal in the Software without restriction, including
7
+ without limitation the rights to use, copy, modify, merge, publish,
8
+ distribute, sublicense, and/or sell copies of the Software, and to
9
+ permit persons to whom the Software is furnished to do so, subject to
10
+ the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be
13
+ included in all copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
16
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
17
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
18
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
19
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
20
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
21
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
data/Manifest.txt ADDED
@@ -0,0 +1,37 @@
1
+ History.txt
2
+ License.txt
3
+ Manifest.txt
4
+ README.txt
5
+ Rakefile
6
+ config/hoe.rb
7
+ config/requirements.rb
8
+ ext/pikl/extconf.rb
9
+ ext/pikl/pikl.h
10
+ ext/pikl/pikl_bitmap.c
11
+ ext/pikl/pikl_bitmap.h
12
+ ext/pikl/pikl_effect.c
13
+ ext/pikl/pikl_effect.h
14
+ ext/pikl/pikl_io.c
15
+ ext/pikl/pikl_io.h
16
+ ext/pikl/pikl_jpeg.c
17
+ ext/pikl/pikl_jpeg.h
18
+ ext/pikl/pikl_png.c
19
+ ext/pikl/pikl_png.h
20
+ ext/pikl/pikl_private.h
21
+ ext/pikl/pikl_resize.c
22
+ ext/pikl/pikl_resize.h
23
+ ext/pikl/pikl_rotate.c
24
+ ext/pikl/pikl_rotate.h
25
+ ext/pikl/pikl_trim.c
26
+ ext/pikl/pikl_trim.h
27
+ lib/pikl.rb
28
+ lib/pikl/const.rb
29
+ lib/pikl/errors.rb
30
+ lib/pikl/ext.rb
31
+ lib/pikl/image.rb
32
+ lib/pikl/version.rb
33
+ setup.rb
34
+ test/sample.jpg
35
+ test/test_helper.rb
36
+ test/test_pikl.rb
37
+ test/test_pikl_image.rb
data/README.txt ADDED
@@ -0,0 +1,52 @@
1
+ = pikl
2
+
3
+ Pikl is an image librarry. This library aims to process the image easily.
4
+
5
+ === Installation of pikl
6
+
7
+ The simplest way is to install the gem:
8
+
9
+ $ sudo gem install pikl
10
+
11
+ == SYNOPSIS:
12
+
13
+ require "pikl"
14
+ Pikl::Image.open('path/to/image.jpg') do |img|
15
+ img.trim(10,5,-10,-5)
16
+ img.save('path/to/output.png', :png)
17
+ end
18
+
19
+ == REQUIREMENTS:
20
+
21
+ Currently, pikl-core (implemented with C) depends on the following libraries:
22
+
23
+ * libjpeg
24
+ * libpng
25
+
26
+ notice: pikl use binary library on windows. so these libraries aren't necessary.
27
+
28
+ == LICENSE:
29
+
30
+ (The MIT License)
31
+
32
+ Copyright (c) 2008 pikl Ryota Maruko
33
+ Copyright (c) 2008 libpikl Keiko Soejima
34
+
35
+ Permission is hereby granted, free of charge, to any person obtaining
36
+ a copy of this software and associated documentation files (the
37
+ 'Software'), to deal in the Software without restriction, including
38
+ without limitation the rights to use, copy, modify, merge, publish,
39
+ distribute, sublicense, and/or sell copies of the Software, and to
40
+ permit persons to whom the Software is furnished to do so, subject to
41
+ the following conditions:
42
+
43
+ The above copyright notice and this permission notice shall be
44
+ included in all copies or substantial portions of the Software.
45
+
46
+ THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND,
47
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
48
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
49
+ IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
50
+ CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
51
+ TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
52
+ SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
data/Rakefile ADDED
@@ -0,0 +1,4 @@
1
+ require 'config/requirements'
2
+ require 'config/hoe' # setup Hoe + all gem configuration
3
+
4
+ Dir['tasks/**/*.rake'].each { |rake| load rake }
data/config/hoe.rb ADDED
@@ -0,0 +1,72 @@
1
+ require 'pikl/version'
2
+
3
+ AUTHOR = 'Ryota Maruko' # can also be an array of Authors
4
+ EMAIL = "FIXME email"
5
+ DESCRIPTION = "Simple Image Lib."
6
+ GEM_NAME = 'pikl' # what ppl will type to install your gem
7
+ RUBYFORGE_PROJECT = 'pikl' # The unix name for your project
8
+ HOMEPATH = "http://#{RUBYFORGE_PROJECT}.rubyforge.org"
9
+ DOWNLOAD_PATH = "http://rubyforge.org/projects/#{RUBYFORGE_PROJECT}"
10
+
11
+ @config_file = "~/.rubyforge/user-config.yml"
12
+ @config = nil
13
+ RUBYFORGE_USERNAME = "unknown"
14
+ def rubyforge_username
15
+ unless @config
16
+ begin
17
+ @config = YAML.load(File.read(File.expand_path(@config_file)))
18
+ rescue
19
+ puts <<-EOS
20
+ ERROR: No rubyforge config file found: #{@config_file}
21
+ Run 'rubyforge setup' to prepare your env for access to Rubyforge
22
+ - See http://newgem.rubyforge.org/rubyforge.html for more details
23
+ EOS
24
+ exit
25
+ end
26
+ end
27
+ RUBYFORGE_USERNAME.replace @config["username"]
28
+ end
29
+
30
+
31
+ REV = nil
32
+ # UNCOMMENT IF REQUIRED:
33
+ # REV = `svn info`.each {|line| if line =~ /^Revision:/ then k,v = line.split(': '); break v.chomp; else next; end} rescue nil
34
+ VERS = Pikl::VERSION::STRING + (REV ? ".#{REV}" : "")
35
+ RDOC_OPTS = ['--quiet', '--title', 'pikl documentation',
36
+ "--opname", "index.html",
37
+ "--line-numbers",
38
+ "--main", "README",
39
+ "--inline-source"]
40
+
41
+ class Hoe
42
+ def extra_deps
43
+ @extra_deps.reject! { |x| Array(x).first == 'hoe' }
44
+ @extra_deps
45
+ end
46
+ end
47
+
48
+ # Generate all the Rake tasks
49
+ # Run 'rake -T' to see list of generated tasks (from gem root directory)
50
+ $hoe = Hoe.new(GEM_NAME, VERS) do |p|
51
+ p.developer(AUTHOR, EMAIL)
52
+ p.description = DESCRIPTION
53
+ p.summary = DESCRIPTION
54
+ p.url = HOMEPATH
55
+ p.rubyforge_name = RUBYFORGE_PROJECT if RUBYFORGE_PROJECT
56
+ p.test_globs = ["test/**/test_*.rb"]
57
+ p.clean_globs |= ['**/.*.sw?', '*.gem', '.config', '**/.DS_Store'] #An array of file patterns to delete on clean.
58
+
59
+ # == Optional
60
+ p.changes = p.paragraphs_of("History.txt", 0..1).join("\n\n")
61
+ #p.extra_deps = [] # An array of rubygem dependencies [name, version], e.g. [ ['active_support', '>= 1.3.1'] ]
62
+
63
+ p.spec_extras = {
64
+ :extensions => ['ext/pikl/extconf.rb'],
65
+ } # A hash of extra values to set in the gemspec.
66
+
67
+ end
68
+
69
+ CHANGES = $hoe.paragraphs_of('History.txt', 0..1).join("\\n\\n")
70
+ PATH = (RUBYFORGE_PROJECT == GEM_NAME) ? RUBYFORGE_PROJECT : "#{RUBYFORGE_PROJECT}/#{GEM_NAME}"
71
+ $hoe.remote_rdoc_dir = File.join(PATH.gsub(/^#{RUBYFORGE_PROJECT}\/?/,''), 'rdoc')
72
+ $hoe.rsync_args = '-av --delete --ignore-errors'
@@ -0,0 +1,15 @@
1
+ require 'fileutils'
2
+ include FileUtils
3
+
4
+ require 'rubygems'
5
+ %w[rake hoe newgem rubigen].each do |req_gem|
6
+ begin
7
+ require req_gem
8
+ rescue LoadError
9
+ puts "This Rakefile requires the '#{req_gem}' RubyGem."
10
+ puts "Installation: gem install #{req_gem} -y"
11
+ exit
12
+ end
13
+ end
14
+
15
+ $:.unshift(File.join(File.dirname(__FILE__), %w[.. lib]))
@@ -0,0 +1,16 @@
1
+ =begin
2
+ usage: ruby extconf.rb [options ...]
3
+ configure options:
4
+ --with-jpeg-include=dir
5
+ --with-jpeg-lib=dir
6
+ --with-png-include=dir
7
+ --with-png-lib=dir
8
+ =end
9
+ require 'mkmf'
10
+
11
+ dir_config('jpeg')
12
+ dir_config('png')
13
+ if have_header('jpeglib.h') and have_library('jpeg') and have_header('png.h') and have_library('png')
14
+ create_makefile('pikl/pikl')
15
+ end
16
+
data/ext/pikl/pikl.h ADDED
@@ -0,0 +1,264 @@
1
+ /*! @file
2
+ @brief image library "pikl"
3
+ simple image library
4
+ @author soe(soezimaster@gmail.com)
5
+ @date 2008.4
6
+ */
7
+ #ifndef _LIB_PIKL_
8
+ #define _LIB_PIKL_
9
+
10
+ #ifdef WIN32
11
+ #define PKLExport __declspec(dllexport)
12
+ #define XMD_H
13
+ #else
14
+ #define PKLExport
15
+ #endif
16
+
17
+ #if defined __cplusplus
18
+ extern "C" {
19
+ #endif
20
+
21
+ /*! version */
22
+ #define PKL_VERSION "libpikl 0.1"
23
+
24
+ // PKLImage
25
+ typedef struct _PKLImage * PKLImage;
26
+
27
+ /*!
28
+ support format<br>
29
+ ■JPEG:<br>
30
+ gray, rgb, cmyk<br>
31
+ * color-typeのYCbCrおよびYCCには読み取りも保存も対応していません。<br>
32
+ ■PNG:<br>
33
+ gray,gray-alpha,rgb,rgb-alpha,palette<br>
34
+ * alphaは読取は可能ですが、保存はできません。<br>
35
+ * paletteはRGBとして扱われます。<br>
36
+ ■BMP(windows bitmap):<br>
37
+ 24bit only
38
+ */
39
+ typedef enum {
40
+ PKL_FORMAT_ERROR, /*!< error */
41
+ PKL_FORMAT_JPEG, /*!< jpeg */
42
+ PKL_FORMAT_PNG, /*!< png */
43
+ PKL_FORMAT_BITMAP /*!< windows bitmap */
44
+ } PKL_FORMAT;
45
+
46
+ /*! color type */
47
+ typedef enum {
48
+ PKL_UNKNOWN, /*!< error */
49
+ PKL_BLACKWHITE, /*!< non support */
50
+ PKL_GRAYSCALE, /*!< gray scale */
51
+ PKL_RGB, /*!< 24bit RGB */
52
+ PKL_RGBA, /*!< non support */
53
+ PKL_YCbCr, /*!< non support */
54
+ PKL_CMYK, /*!< CMYK(for jpeg) */
55
+ PKL_YCCK /*!< non support */
56
+ } PKL_COLOR_SPACE;
57
+
58
+ /*! right turn angle(for rotate) */
59
+ typedef enum {
60
+ PKL_ANGLE_000,
61
+ PKL_ANGLE_090,
62
+ PKL_ANGLE_180,
63
+ PKL_ANGLE_270
64
+ } PKL_ANGLE;
65
+
66
+ /*!
67
+ sampling pattern(for resize)<br>
68
+ ※全てのサンプリングパターンに拡大縮小対応しています。<br>
69
+ ※但し、pixcel averageで拡大をする場合は、lanczosと品質は同じになります。
70
+ */
71
+ typedef enum {
72
+ PKL_SAMPLE_ERROR,
73
+ PKL_SAMPLE_NN, /*!< nearest neighbor */
74
+ PKL_SAMPLE_BL, /*!< bilinear */
75
+ PKL_SAMPLE_BC, /*!< bicubic */
76
+ PKL_SAMPLE_PA, /*!< pixcel average */
77
+ PKL_SAMPLE_LZ /*!< lanczos */
78
+ } PKL_SAMPLE;
79
+
80
+ //=============================================================================
81
+ // method
82
+ //=============================================================================
83
+ /*!
84
+ PKLImageを構築します。<br>
85
+ エラーが発生した場合は、NULLが返ります。<br>
86
+ @param in [in] ロードする画像
87
+ @return 成功した場合は、PKLImageのポインタが返ります。失敗したときはNULLが返ります。
88
+ */
89
+ PKLExport PKLImage pkl_open(const char *in);
90
+
91
+ /*!
92
+ 画像フォーマットを返します。<br>
93
+ @param pkl [in] PKLImageオブジェクト
94
+ @return PKL_FORMAT参照
95
+ */
96
+ PKLExport PKL_FORMAT pkl_format(PKLImage pkl);
97
+
98
+ /*!
99
+ 画像の幅を返します。<br>
100
+ @param pkl [in] PKLImageオブジェクト
101
+ @return 画像の幅(ピクセル数)
102
+ */
103
+ PKLExport int pkl_width(PKLImage pkl);
104
+
105
+ /*!
106
+ 画像の高さを返します。<br>
107
+ @param pkl [in] PKLImageオブジェクト
108
+ @return 画像の高さ(ピクセル数)
109
+ */
110
+ PKLExport int pkl_height(PKLImage pkl);
111
+
112
+ /*!
113
+ トリミングします。<br>
114
+ ・パラメータは左上原点です。<br>
115
+ ・パラメータは左上原点です。<br>
116
+ ・左上原点はsx=0, sy=0になります。<br>
117
+ @param pkl [in] PKLImageオブジェクト
118
+ @param sx [in] 切り出し位置(x)
119
+ @param sy [in] 切り出し位置(y)
120
+ @param width [in] sxからの切り出す幅(ピクセル数)
121
+ @param height [in] syからの切り出す高さ(ピクセル数)
122
+ @return 成功した場合は0。失敗した場合は真を返します。
123
+ */
124
+ PKLExport int pkl_trim(PKLImage pkl, int sx, int sy, int width, int height);
125
+
126
+ /*!
127
+ 右回り90度単位で回転します。<br>
128
+ @param pkl [in] PKLImageオブジェクト
129
+ @param angle [in] 回転角度(PKL_ANGLE参照)
130
+ @return 成功した場合は0。失敗した場合は真を返します。
131
+ */
132
+ PKLExport int pkl_rotate(PKLImage pkl, PKL_ANGLE angle);
133
+
134
+ /*!
135
+ 拡大・縮小します。<br>
136
+ @param pkl [in] PKLImageオブジェクト
137
+ @param width [in] 横方向の変形後サイズ(ピクセル数)
138
+ @param height [in] 縦方向の変形後サイズ(ピクセル数)
139
+ @param sample [in] サンプリングパターン(PKL_SAMPLE参照)
140
+ @return 成功した場合は0。失敗した場合は真を返します。
141
+ */
142
+ PKLExport int pkl_resize(PKLImage pkl, int width, int height, PKL_SAMPLE sample);
143
+
144
+ /*!
145
+ アンシャープ処理<br>
146
+ @param pkl [in] PKLImageオブジェクト
147
+ @param threshold [in]
148
+ 適応量。0から255の範囲で指定します。
149
+ 0の時:変化しません。
150
+ 255の時:全ての色にアンシャープ処理が働きます
151
+ @param edge [in]
152
+ エッジ。想定結果が得られる範囲は-10 .. 10程度です。
153
+ edge=0の時:変化しません。
154
+ edge>0の時:値が大きいほど先鋭化されます。
155
+ edge<0の時:値が小さいほどぼやけます。
156
+
157
+ 想定結果が得られる範囲は-10 .. 10程度です。
158
+ これを超える場合は、品質の保証はありません。
159
+ ※画質によりこの通りではありません。-10..10の範囲より小さくなる可能性があります。
160
+ @return 成功した場合は0。失敗した場合は真を返します。
161
+ */
162
+ PKLExport int pkl_unsharp(PKLImage pkl, int threshold, double edge);
163
+
164
+ /*!
165
+ コントラスト調整<br>
166
+ @param pkl [in] PKLImageオブジェクト
167
+ @param rate [in]
168
+ 調整係数。-127 .. 127の範囲で指定します。<br>
169
+ 0の時:変化しません。
170
+ * rateが0以上の時は周波数によるコントラスト強調がおこなわれます。
171
+ * rateが0未満の時は直線的に平坦化されます。
172
+ @return 成功した場合は0。失敗した場合は真を返します。
173
+ */
174
+ PKLExport int pkl_contrast(PKLImage pkl, int rate);
175
+
176
+ /*!
177
+ レベル補正<br>
178
+ ヒストグラムの平坦化をおこないます。各色の分布に偏りがある画像に有効な場合があります。
179
+ @param pkl [in] PKLImageオブジェクト
180
+ @param low [in]
181
+ 全ピクセル数に対して、切り捨てる暗い色の総数の割合(0-100%)
182
+ @param high [in]
183
+ 全ピクセル数に対して、切り捨てる明るい色の総数の割合(0-100%)
184
+ @param coeff [in]
185
+ 平坦化時の係数。
186
+ 1が標準です。1より小さい場合は暗く、1より大きい場合は明るくなります(0.0..2.0)
187
+ @return 成功した場合は0。失敗した場合は真を返します。
188
+ */
189
+ PKLExport int pkl_level(PKLImage pkl, double low, double high, double coeff);
190
+
191
+ /*!
192
+ 明るさ調整<br>
193
+ 各色にcolor値を加算する単純な処理です。
194
+ @param pkl [in] PKLImageオブジェクト
195
+ @param color [in]
196
+ 各色に加算する色。
197
+ 255を指定すれば、ただの白い画像になります。
198
+ -255を指定すると、ただの黒い画像になります。
199
+ @return 成功した場合は0。失敗した場合は真を返します。
200
+ */
201
+ PKLExport int pkl_brightness(PKLImage pkl, int color);
202
+
203
+ /*!
204
+ 輝度(明るさ)・彩度(鮮やかさ)・色相(色合い)調整<br>
205
+ @param pkl [in] PKLImageオブジェクト
206
+ @param ym [in]
207
+ 輝度(-1..1)。
208
+ +0.1で10%up。
209
+ 0.0は変化なし
210
+ @param sm [in]
211
+ 彩度(-1..1)。
212
+ +0.1で10%up。
213
+ 0.0は変化なし
214
+ @param hd [in]
215
+ 色相(360度回転)。
216
+ 360度の倍数では変化しません。
217
+ 参考:R=113.2/Ye=173.0/G=225.0/Cy=293.2/B=353.0/Mg=45.0
218
+ @return 成功した場合は0。失敗した場合は真を返します。
219
+ */
220
+ PKLExport int pkl_hls(PKLImage pkl, double ym, double sm, double hd);
221
+
222
+ /*!
223
+ ガンマ補正<br>
224
+ @param pkl [in] PKLImageオブジェクト
225
+ @param gm [in]
226
+ 補正係数(0.0以上の値が指定できます)。
227
+ 1.0より小さい時は暗く、1.0より大きい時は明るく調整されます。
228
+ 1.0を指定した時は調整されません。
229
+ @return 成功した場合は0。失敗した場合は真を返します。
230
+ */
231
+ PKLExport int pkl_gamma(PKLImage pkl, double gm);
232
+
233
+ /*!
234
+ PNG/JPEG保存時の圧縮率<br>
235
+ @param pkl [in] PKLImageオブジェクト
236
+ @param level [in]
237
+ 0(無圧縮) .. 10(最高圧縮)。
238
+ 指定がない場合は、デフォルトレベルが設定されます。
239
+ @return 成功した場合は0。失敗した場合は真を返します。
240
+ */
241
+ PKLExport int pkl_compress(PKLImage pkl, int level);
242
+
243
+ /*!
244
+ 保存<br>
245
+ @param pkl [in] PKLImageオブジェクト
246
+ @param out [in] 保存ファイル名
247
+ @param format [in] 保存フォーマット(PKL_FORMAT参照)
248
+ @return 成功した場合は0。失敗した場合は真を返します。
249
+ */
250
+ PKLExport int pkl_save(PKLImage pkl, const char *out, PKL_FORMAT format);
251
+
252
+ /*!
253
+ PKLImageオブジェクトの破棄<br>
254
+ 確保していたメモリを全て解放します。用がなくなったら実行するようにしてください。
255
+ @param pkl [in] PKLImageオブジェクト
256
+ @return 成功した場合は0。失敗した場合は真を返します。
257
+ */
258
+ PKLExport void pkl_close(PKLImage pkl);
259
+
260
+ #if defined __cplusplus
261
+ }
262
+ #endif
263
+
264
+ #endif