pikl 0.1.0 → 0.2.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -1,4 +1,5 @@
1
- == 0.1.0 2008-04-08
1
+ == 0.2.0
2
+ * Supports method chain.
2
3
 
3
- * 1 major enhancement:
4
- * Initial release
4
+ == 0.1.0
5
+ * First release!
@@ -29,9 +29,9 @@ lib/pikl/const.rb
29
29
  lib/pikl/errors.rb
30
30
  lib/pikl/ext.rb
31
31
  lib/pikl/image.rb
32
+ lib/pikl/pikl.dll
32
33
  lib/pikl/version.rb
33
34
  setup.rb
34
35
  test/sample.jpg
35
36
  test/test_helper.rb
36
- test/test_pikl.rb
37
37
  test/test_pikl_image.rb
data/README.txt CHANGED
@@ -1,21 +1,33 @@
1
1
  = pikl
2
2
 
3
- Pikl is an image librarry. This library aims to process the image easily.
3
+ Pikl is an image librarry for ruby. This library aims easily image processing. Supports JPEG, PNG and BITMAP.
4
4
 
5
5
  === Installation of pikl
6
6
 
7
7
  The simplest way is to install the gem:
8
8
 
9
9
  $ sudo gem install pikl
10
+
11
+ To use option for libjpeg and libpng directories:
12
+
13
+ $ sudo gem install pikl -- --with-opt-dir=path/to/libraries
10
14
 
11
15
  == SYNOPSIS:
12
16
 
17
+ Basic use of pikl:
13
18
  require "pikl"
14
19
  Pikl::Image.open('path/to/image.jpg') do |img|
15
20
  img.trim(10,5,-10,-5)
16
21
  img.save('path/to/output.png', :png)
17
22
  end
18
23
 
24
+ Use method chain for processing image:
25
+ require "pikl"
26
+ Pikl::Image.open('path/to/image.jpg') do |img|
27
+ img.resize(120,:auto).rotate(90).save('path/to/output.png')
28
+ end
29
+
30
+
19
31
  == REQUIREMENTS:
20
32
 
21
33
  Currently, pikl-core (implemented with C) depends on the following libraries:
@@ -23,14 +35,14 @@ Currently, pikl-core (implemented with C) depends on the following libraries:
23
35
  * libjpeg
24
36
  * libpng
25
37
 
26
- notice: pikl use binary library on windows. so these libraries aren't necessary.
38
+ notice: pikl use binary library on windows. so these libraries aren't necessary on windows.
27
39
 
28
40
  == LICENSE:
29
41
 
30
42
  (The MIT License)
31
43
 
32
- Copyright (c) 2008 pikl Ryota Maruko
33
- Copyright (c) 2008 libpikl Keiko Soejima
44
+ Copyright (c) 2008 pikl.rb Ryota Maruko
45
+ Copyright (c) 2008 pikl.so Keiko Soejima
34
46
 
35
47
  Permission is hereby granted, free of charge, to any person obtaining
36
48
  a copy of this software and associated documentation files (the
data/Rakefile CHANGED
@@ -1,4 +1,4 @@
1
+ PACKAGE_PLATFORM = (ARGV[0] =~ /mswin32$/) ? 'mswin32' : RUBY_PLATFORM
1
2
  require 'config/requirements'
2
3
  require 'config/hoe' # setup Hoe + all gem configuration
3
-
4
4
  Dir['tasks/**/*.rake'].each { |rake| load rake }
@@ -1,8 +1,8 @@
1
1
  require 'pikl/version'
2
2
 
3
3
  AUTHOR = 'Ryota Maruko' # can also be an array of Authors
4
- EMAIL = "FIXME email"
5
- DESCRIPTION = "Simple Image Lib."
4
+ EMAIL = ""
5
+ DESCRIPTION = "Pikl is an image librarry for ruby. This library aims easily image processing. Supports JPEG, PNG and BITMAP."
6
6
  GEM_NAME = 'pikl' # what ppl will type to install your gem
7
7
  RUBYFORGE_PROJECT = 'pikl' # The unix name for your project
8
8
  HOMEPATH = "http://#{RUBYFORGE_PROJECT}.rubyforge.org"
@@ -27,7 +27,6 @@ Run 'rubyforge setup' to prepare your env for access to Rubyforge
27
27
  RUBYFORGE_USERNAME.replace @config["username"]
28
28
  end
29
29
 
30
-
31
30
  REV = nil
32
31
  # UNCOMMENT IF REQUIRED:
33
32
  # REV = `svn info`.each {|line| if line =~ /^Revision:/ then k,v = line.split(': '); break v.chomp; else next; end} rescue nil
@@ -59,11 +58,8 @@ $hoe = Hoe.new(GEM_NAME, VERS) do |p|
59
58
  # == Optional
60
59
  p.changes = p.paragraphs_of("History.txt", 0..1).join("\n\n")
61
60
  #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
-
61
+ p.spec_extras = (PACKAGE_PLATFORM =~ /mswin32/) ? {} : { :extensions => ['ext/pikl/extconf.rb'] }
62
+ # A hash of extra values to set in the gemspec.
67
63
  end
68
64
 
69
65
  CHANGES = $hoe.paragraphs_of('History.txt', 0..1).join("\\n\\n")
@@ -6,11 +6,12 @@
6
6
  --with-png-include=dir
7
7
  --with-png-lib=dir
8
8
  =end
9
+
9
10
  require 'mkmf'
11
+ require 'rbconfig'
10
12
 
11
13
  dir_config('jpeg')
12
14
  dir_config('png')
13
- if have_header('jpeglib.h') and have_library('jpeg') and have_header('png.h') and have_library('png')
15
+ if have_header('jpeglib.h') && have_library('jpeg') && have_header('png.h') && have_library('png')
14
16
  create_makefile('pikl/pikl')
15
17
  end
16
-
@@ -124,7 +124,7 @@ PKLExport int pkl_height(PKLImage pkl);
124
124
  PKLExport int pkl_trim(PKLImage pkl, int sx, int sy, int width, int height);
125
125
 
126
126
  /*!
127
- 右回り90度単位で回転します。<br>
127
+ 左回り90度単位で回転します。<br>
128
128
  @param pkl [in] PKLImageオブジェクト
129
129
  @param angle [in] 回転角度(PKL_ANGLE参照)
130
130
  @return 成功した場合は0。失敗した場合は真を返します。
@@ -12,10 +12,6 @@
12
12
  //unsharp target pixel
13
13
  #define RADIUS 1
14
14
 
15
- #ifndef M_PI
16
- #define M_PI 3.14159265358979323846
17
- #endif
18
-
19
15
  typedef struct {
20
16
  int max, min;
21
17
  long data[PKL_COLOR];
@@ -5,7 +5,9 @@
5
5
  #define PKL_RGB(v) v<0?0:v>255?255:v
6
6
  #define PKL_CHANNEL 4
7
7
  #define PKL_COLOR 256
8
-
8
+ #ifndef M_PI
9
+ #define M_PI 3.14159265358979323846
10
+ #endif
9
11
  //=============================================================================
10
12
  // PKLImage
11
13
  //=============================================================================
@@ -15,14 +15,14 @@ PKLExport int pkl_rotate(PKLImage pkl, PKL_ANGLE angle)
15
15
  case PKL_ANGLE_000:
16
16
  return(0);
17
17
  case PKL_ANGLE_090:
18
- rcos = 0;
19
- rsin = -1;
18
+ rcos = 0;
19
+ rsin = 1;
20
20
  width = pkl->height;
21
21
  height = pkl->width;
22
- sx = -(pkl->height-1);
23
- sy = 0;
24
- ex = 0;
25
- ey = pkl->width-1;
22
+ sx = 0;
23
+ sy = -(pkl->width-1);
24
+ ex = pkl->height-1;
25
+ ey = 0;
26
26
  break;
27
27
  case PKL_ANGLE_180:
28
28
  rcos = -1;
@@ -35,14 +35,14 @@ PKLExport int pkl_rotate(PKLImage pkl, PKL_ANGLE angle)
35
35
  ey = 0;
36
36
  break;
37
37
  case PKL_ANGLE_270:
38
- rcos = 0;
39
- rsin = 1;
38
+ rcos = 0;
39
+ rsin = -1;
40
40
  width = pkl->height;
41
41
  height = pkl->width;
42
- sx = 0;
43
- sy = -(pkl->width-1);
44
- ex = pkl->height-1;
45
- ey = 0;
42
+ sx = -(pkl->height-1);
43
+ sy = 0;
44
+ ex = 0;
45
+ ey = pkl->width-1;
46
46
  break;
47
47
  default:
48
48
  return(1);
@@ -12,17 +12,22 @@ module Pikl
12
12
  ANGLE270 = 3
13
13
 
14
14
  SAMPLE_NN = 1 #nearest neighbor
15
- SAMPLE_BC = 2 #bicubic(4points)
16
- SAMPLE_BC2 = 3 #bicubic(16points)
15
+ SAMPLE_BL = 2 #bilinear
16
+ SAMPLE_BC = 3 #bicubic
17
17
  SAMPLE_PA = 4 #pixcel average(reduce only)
18
18
  SAMPLE_LZ = 5 #lanczos
19
-
19
+
20
20
  SAMPLES = {
21
21
  :nearest_neighbor => SAMPLE_NN,
22
+ :bilinear => SAMPLE_BL,
22
23
  :bicubic => SAMPLE_BC,
23
- :bicubic2 => SAMPLE_BC2,
24
24
  :pixcel_averate => SAMPLE_PA,
25
- :lanczoz => SAMPLE_LZ,
25
+ :lanczos => SAMPLE_LZ,
26
+ :nn => SAMPLE_NN,
27
+ :bl => SAMPLE_BL,
28
+ :bc => SAMPLE_BC,
29
+ :pa => SAMPLE_PA,
30
+ :lz => SAMPLE_LZ,
26
31
  }
27
32
 
28
33
  ROTATE_ANGLE = {
@@ -5,7 +5,9 @@ module Pikl
5
5
 
6
6
  module Ext
7
7
  extend DL::Importable
8
- dlload "#{File.dirname(__FILE__)}/pikl.#{RbConfig::CONFIG['DLEXT']}"
8
+
9
+ dlext = (RbConfig::CONFIG["host_os"] == 'mswin32') ? 'dll' : RbConfig::CONFIG['DLEXT']
10
+ dlload "#{File.dirname(__FILE__)}/pikl.#{dlext}"
9
11
 
10
12
  typealias("KKImage", "void")
11
13
  typealias("PKL_FORMAT", "int")
@@ -28,5 +30,6 @@ module Pikl
28
30
  extern "int pkl_brightness(PKLImage*, int)"
29
31
  extern "int pkl_hls(PKLImage*, double, double, double)"
30
32
  extern "int pkl_gamma(PKLImage*, double)"
33
+
31
34
  end
32
35
  end
@@ -22,7 +22,7 @@ module Pikl
22
22
 
23
23
  def save(outpath, format = nil, compress = nil)
24
24
  raise Pikl::ImageProcessException.new("image already closed.") unless @pkl_image
25
- format ||= @format ||= split_extensions(outpath)
25
+ format ||= (split_extensions(outpath) || @format)
26
26
  validate_format(format)
27
27
  if compress
28
28
  validate_compress(compress)
@@ -30,6 +30,7 @@ module Pikl
30
30
  end
31
31
  Ext.pkl_save(@pkl_image, File.expand_path(outpath), EXTENSIONS_FORMATS[format.to_s] || format.to_i)
32
32
  self.close unless(@block)
33
+ @pkl_image
33
34
  end
34
35
 
35
36
  def close()
@@ -55,6 +56,8 @@ module Pikl
55
56
  dist_y = trim_dist(y, self.height, dist_y)
56
57
 
57
58
  Ext.pkl_trim(@pkl_image, x, y, dist_x, dist_y)
59
+
60
+ self
58
61
  end
59
62
 
60
63
  def trim_dist(start, dist_from, dist_to)
@@ -70,9 +73,10 @@ module Pikl
70
73
  def rotate(angle)
71
74
  validate_rotate(angle)
72
75
  Ext.pkl_rotate(@pkl_image, ROTATE_ANGLE[angle.to_i])
76
+ self
73
77
  end
74
78
 
75
- def resize(width, height, sample = :nearest_neighbor)
79
+ def resize(width, height, sample = :pixcel_averate)
76
80
  validate_auto(width,height)
77
81
 
78
82
  case sample.class.name
@@ -86,6 +90,7 @@ module Pikl
86
90
  validate_resize(width, height)
87
91
 
88
92
  Ext.pkl_resize(@pkl_image, width, height, sample)
93
+ self
89
94
  end
90
95
 
91
96
  # threshold=0-255
@@ -101,6 +106,7 @@ module Pikl
101
106
  # ※画質によりこの通りではありません。-10..10の範囲より小さくなる可能性があります。
102
107
  def unshapmask(threshold, edge)
103
108
  Ext.pkl_unsharp(@pkl_image, threshold.to_i, edge.to_f)
109
+ self
104
110
  end
105
111
 
106
112
  # コントラスト調整
@@ -114,6 +120,7 @@ module Pikl
114
120
  # * rateが0未満の時は直線的に平坦化されます
115
121
  def contrast(rate)
116
122
  Ext.pkl_contrast(@pkl_image, rate.to_f)
123
+ self
117
124
  end
118
125
 
119
126
  # レベル補正
@@ -123,6 +130,7 @@ module Pikl
123
130
  # high = 全ピクセル数に対して、切り捨てる明るい色の総数の割合(0-100%)
124
131
  def level(low, high, coeff)
125
132
  Ext.pkl_level(@pkl_image, low.to_f, high.to_f, coeff.to_f)
133
+ self
126
134
  end
127
135
 
128
136
  # 明るさ調整
@@ -131,6 +139,7 @@ module Pikl
131
139
  # colorに-255を指定すると、ただの黒い画像になります。
132
140
  def brightness(color)
133
141
  Ext.pkl_brightness(@pkl_image, color.to_i)
142
+ self
134
143
  end
135
144
 
136
145
  # 輝度(明るさ)・彩度(鮮やかさ)・色相(色合い)調整
@@ -140,6 +149,7 @@ module Pikl
140
149
  # hd(色相) 360.0度回転(R=113.2/Ye=173.0/G=225.0/Cy=293.2/B=353.0/Mg=45.0).360の倍数では変化なし
141
150
  def hls(ym, sm ,hd)
142
151
  Ext.pkl_hls(@pkl_image, ym.to_f, sm.to_f, hd.to_f)
152
+ self
143
153
  end
144
154
 
145
155
  # ガンマ補正
@@ -150,6 +160,7 @@ module Pikl
150
160
  # 1.0を指定した時は調整されません。
151
161
  def gamma(gm)
152
162
  Ext.pkl_gamma(@pkl_image, gm.to_f)
163
+ self
153
164
  end
154
165
 
155
166
  # regular expressions to try for identifying extensions
Binary file
@@ -1,7 +1,7 @@
1
1
  module Pikl #:nodoc:
2
2
  module VERSION #:nodoc:
3
3
  MAJOR = 0
4
- MINOR = 1
4
+ MINOR = 2
5
5
  TINY = 0
6
6
 
7
7
  STRING = [MAJOR, MINOR, TINY].join('.')
Binary file
@@ -5,8 +5,8 @@ class TestPiklImage < Test::Unit::TestCase
5
5
  SAMPLE_IMAGE = File.dirname(__FILE__) + '/sample.jpg'
6
6
  SAMPLE_OUTPUT = File.dirname(__FILE__) + '/output.jpg'
7
7
 
8
- SAMPLE_IMAGE_W = 768
9
- SAMPLE_IMAGE_H = 1024
8
+ SAMPLE_IMAGE_W = 120
9
+ SAMPLE_IMAGE_H = 160
10
10
 
11
11
  def setup
12
12
 
@@ -258,5 +258,11 @@ class TestPiklImage < Test::Unit::TestCase
258
258
  img.save(SAMPLE_OUTPUT,Pikl::JPEG,5)
259
259
  end
260
260
  end
261
+
262
+ def test_method_chain
263
+ Pikl::Image.open(SAMPLE_IMAGE) do |img|
264
+ img.trim(5,10,:auto,:auto).rotate(90).resize(50,:auto).unshapmask(10,3).contrast(10).level(5,5,1.2).brightness(10).hls(0.1,0.1,355).gamma(1.2).save(SAMPLE_OUTPUT)
265
+ end
266
+ end
261
267
 
262
268
  end
metadata CHANGED
@@ -1,35 +1,30 @@
1
1
  --- !ruby/object:Gem::Specification
2
- rubygems_version: 0.9.2
3
- specification_version: 1
4
2
  name: pikl
5
3
  version: !ruby/object:Gem::Version
6
- version: 0.1.0
7
- date: 2008-05-01 00:00:00 +09:00
8
- summary: Simple Image Lib.
9
- require_paths:
10
- - lib
11
- - ext
12
- email:
13
- - FIXME email
14
- homepage: http://pikl.rubyforge.org
15
- rubyforge_project: pikl
16
- description: Simple Image Lib.
17
- autorequire:
18
- default_executable:
19
- bindir: bin
20
- has_rdoc: true
21
- required_ruby_version: !ruby/object:Gem::Version::Requirement
22
- requirements:
23
- - - ">"
24
- - !ruby/object:Gem::Version
25
- version: 0.0.0
26
- version:
4
+ version: 0.2.0
27
5
  platform: ruby
28
- signing_key:
29
- cert_chain:
30
- post_install_message:
31
6
  authors:
32
7
  - Ryota Maruko
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+
12
+ date: 2008-05-02 00:00:00 +09:00
13
+ default_executable:
14
+ dependencies: []
15
+
16
+ description: Pikl is an image librarry for ruby. This library aims easily image processing. Supports JPEG, PNG and BITMAP.
17
+ email:
18
+ - ""
19
+ executables: []
20
+
21
+ extensions:
22
+ - ext/pikl/extconf.rb
23
+ extra_rdoc_files:
24
+ - History.txt
25
+ - License.txt
26
+ - Manifest.txt
27
+ - README.txt
33
28
  files:
34
29
  - History.txt
35
30
  - License.txt
@@ -62,29 +57,40 @@ files:
62
57
  - lib/pikl/errors.rb
63
58
  - lib/pikl/ext.rb
64
59
  - lib/pikl/image.rb
60
+ - lib/pikl/pikl.dll
65
61
  - lib/pikl/version.rb
66
62
  - setup.rb
67
63
  - test/sample.jpg
68
64
  - test/test_helper.rb
69
- - test/test_pikl.rb
70
- - test/test_pikl_image.rb
71
- test_files:
72
- - test/test_helper.rb
73
- - test/test_pikl.rb
74
65
  - test/test_pikl_image.rb
66
+ has_rdoc: true
67
+ homepage: http://pikl.rubyforge.org
68
+ post_install_message:
75
69
  rdoc_options:
76
70
  - --main
77
71
  - README.txt
78
- extra_rdoc_files:
79
- - History.txt
80
- - License.txt
81
- - Manifest.txt
82
- - README.txt
83
- executables: []
84
-
85
- extensions:
86
- - ext/pikl/extconf.rb
72
+ require_paths:
73
+ - lib
74
+ - ext
75
+ required_ruby_version: !ruby/object:Gem::Requirement
76
+ requirements:
77
+ - - ">="
78
+ - !ruby/object:Gem::Version
79
+ version: "0"
80
+ version:
81
+ required_rubygems_version: !ruby/object:Gem::Requirement
82
+ requirements:
83
+ - - ">="
84
+ - !ruby/object:Gem::Version
85
+ version: "0"
86
+ version:
87
87
  requirements: []
88
88
 
89
- dependencies: []
90
-
89
+ rubyforge_project: pikl
90
+ rubygems_version: 1.0.1
91
+ signing_key:
92
+ specification_version: 2
93
+ summary: Pikl is an image librarry for ruby. This library aims easily image processing. Supports JPEG, PNG and BITMAP.
94
+ test_files:
95
+ - test/test_helper.rb
96
+ - test/test_pikl_image.rb
@@ -1,13 +0,0 @@
1
- require File.dirname(__FILE__) + '/test_helper.rb'
2
-
3
- class TestPikl < Test::Unit::TestCase
4
-
5
- def setup
6
-
7
- end
8
-
9
- def test_truth
10
- assert_equal(true, true)
11
- end
12
-
13
- end