ruby-exiv2 0.3 → 0.4

Sign up to get free protection for your applications and to get access to all the features.
data/lib/Makefile CHANGED
@@ -4,7 +4,7 @@ SHELL = /bin/sh
4
4
  #### Start of system configuration section. ####
5
5
 
6
6
  srcdir = .
7
- topdir = /opt/local/lib/ruby/1.8/i686-darwin8.7.1
7
+ topdir = /opt/local/lib/ruby/1.8/powerpc-darwin8.8.0
8
8
  hdrdir = $(topdir)
9
9
  VPATH = $(srcdir):$(topdir):$(hdrdir)
10
10
  prefix = $(DESTDIR)/opt/local
@@ -36,8 +36,10 @@ LIBRUBY_A = lib$(RUBY_SO_NAME)-static.a
36
36
  LIBRUBYARG_SHARED = -l$(RUBY_SO_NAME)
37
37
  LIBRUBYARG_STATIC = -l$(RUBY_SO_NAME)-static
38
38
 
39
+ RUBY_EXTCONF_H =
39
40
  CFLAGS = -fno-common -O -pipe -I/opt/local/include -fno-common -pipe -fno-common
40
- CPPFLAGS = -I. -I$(topdir) -I$(hdrdir) -I$(srcdir) -DHAVE_EXIF_HPP -O -pipe -I/opt/local/include -Wall -I/usr/local/include/exiv2 -I/usr/include/exiv2
41
+ INCFLAGS = -I. -I. -I/opt/local/lib/ruby/1.8/powerpc-darwin8.8.0 -I.
42
+ CPPFLAGS = -O -pipe -I/opt/local/include -Wall -I/usr/local/include/exiv2 -I/usr/include/exiv2
41
43
  CXXFLAGS = $(CFLAGS)
42
44
  DLDFLAGS = -L/opt/local/lib -lstdc++
43
45
  LDSHARED = cc -dynamic -bundle -undefined suppress -flat_namespace
@@ -46,9 +48,9 @@ EXEEXT =
46
48
 
47
49
  RUBY_INSTALL_NAME = ruby
48
50
  RUBY_SO_NAME = ruby
49
- arch = i686-darwin8.7.1
50
- sitearch = i686-darwin8.7.1
51
- vendorarch = i686-darwin8.7.1
51
+ arch = powerpc-darwin8.8.0
52
+ sitearch = powerpc-darwin8.8.0
53
+ vendorarch = powerpc-darwin8.8.0
52
54
  ruby_version = 1.8
53
55
  ruby = /opt/local/bin/ruby
54
56
  RUBY = $(ruby)
@@ -74,11 +76,12 @@ extout =
74
76
  extout_prefix =
75
77
  target_prefix =
76
78
  LOCAL_LIBS =
77
- LIBS = $(LIBRUBYARG_SHARED) -lexiv2 -lpthread -ldl -lobjc
79
+ LIBS = $(LIBRUBYARG_SHARED) -lpthread -ldl -lobjc
78
80
  SRCS = exif.cpp exiv2.cpp image.cpp
79
81
  OBJS = exif.o exiv2.o image.o
80
82
  TARGET = exiv2
81
83
  DLLIB = $(TARGET).bundle
84
+ EXTSTATIC =
82
85
  STATIC_LIB =
83
86
 
84
87
  RUBYCOMMONDIR = $(sitedir)$(target_prefix)
@@ -96,7 +99,7 @@ clean:
96
99
  @-$(RM) $(CLEANLIBS) $(CLEANOBJS) $(CLEANFILES)
97
100
 
98
101
  distclean: clean
99
- @-$(RM) Makefile extconf.h conftest.* mkmf.log
102
+ @-$(RM) Makefile $(RUBY_EXTCONF_H) conftest.* mkmf.log
100
103
  @-$(RM) core ruby$(EXEEXT) *~ $(DISTCLEANFILES)
101
104
 
102
105
  realclean: distclean
@@ -120,19 +123,19 @@ site-install-rb: install-rb
120
123
  .SUFFIXES: .c .m .cc .cxx .cpp .C .o
121
124
 
122
125
  .cc.o:
123
- $(CXX) $(CXXFLAGS) $(CPPFLAGS) -c $<
126
+ $(CXX) $(INCFLAGS) $(CPPFLAGS) $(CXXFLAGS) -c $<
124
127
 
125
128
  .cxx.o:
126
- $(CXX) $(CXXFLAGS) $(CPPFLAGS) -c $<
129
+ $(CXX) $(INCFLAGS) $(CPPFLAGS) $(CXXFLAGS) -c $<
127
130
 
128
131
  .cpp.o:
129
- $(CXX) $(CXXFLAGS) $(CPPFLAGS) -c $<
132
+ $(CXX) $(INCFLAGS) $(CPPFLAGS) $(CXXFLAGS) -c $<
130
133
 
131
134
  .C.o:
132
- $(CXX) $(CXXFLAGS) $(CPPFLAGS) -c $<
135
+ $(CXX) $(INCFLAGS) $(CPPFLAGS) $(CXXFLAGS) -c $<
133
136
 
134
137
  .c.o:
135
- $(CC) $(CFLAGS) $(CPPFLAGS) -c $<
138
+ $(CC) $(INCFLAGS) $(CPPFLAGS) $(CFLAGS) -c $<
136
139
 
137
140
  $(DLLIB): $(OBJS)
138
141
  @-$(RM) $@
data/lib/exif.cpp CHANGED
@@ -102,8 +102,14 @@ static VALUE exiv2_exif_get(VALUE self, VALUE key) {
102
102
  * then I will just set apropreciated hash entry to this casted value
103
103
  */
104
104
  static bool marshall_value(Exiv2::ExifData &exifData, const char* key, VALUE value) {
105
- Exiv2::ExifKey exif_key(key);
106
- Exiv2::TypeId type_id = Exiv2::ExifTags::tagType(exif_key.tag(), exif_key.ifdId());
105
+ Exiv2::TypeId type_id;
106
+ try {
107
+ Exiv2::ExifKey exif_key(key);
108
+ type_id = Exiv2::ExifTags::tagType(exif_key.tag(), exif_key.ifdId());
109
+ }
110
+ catch(Exiv2::Error& e) {
111
+ rb_raise(eError, "Cannot set tag %s because it doesn't exists. Look at http://www.exiv2.org/tags.html for list of supported tags", key);
112
+ }
107
113
  switch(type_id) {
108
114
  case Exiv2::invalidTypeId:
109
115
  {
@@ -167,17 +173,12 @@ static VALUE exiv2_exif_set(VALUE self, VALUE key, VALUE value) {
167
173
  Data_Get_Struct(self, rbImage, image);
168
174
 
169
175
  VALUE strkey = rb_funcall(key, rb_intern("to_s"), 0);
170
- bool marshalled = false;
171
- {
172
- Exiv2::ExifData &exifData = image->image->exifData();
176
+ Exiv2::ExifData &exifData = image->image->exifData();
173
177
 
174
- marshalled = marshall_value(exifData, STR(strkey), value);
175
- }
176
-
177
- if(!marshalled) {
178
+ if(!marshall_value(exifData, STR(strkey), value)) {
178
179
  THROW("Couldn't write %s", STR(strkey));
179
180
  }
180
-
181
+
181
182
  image->dirty = true;
182
183
  return value;
183
184
  __NIL_END
@@ -287,6 +288,36 @@ static VALUE exiv2_exif_empty(VALUE self) {
287
288
  }
288
289
 
289
290
 
291
+ /*
292
+ static void tag_leave(Exiv2::TagInfo* info) {
293
+
294
+ }
295
+
296
+ static VALUE create_exiv2_tag(VALUE exif, Exiv2::TagInfo* info) {
297
+ VALUE tag_info = Data_Wrap_Struct(cTag, 0, tag_leave, info);
298
+ rb_iv_set(tag_info, "@exif", exif);
299
+ return tag_info;
300
+ }
301
+ static VALUE exiv2_exif_tags_each(VALUE self) {
302
+ for (int i=0; Exiv2::ifdTagInfo[i].tag_ != 0xffff; ++i) {
303
+ rb_yield(create_exiv2_tag(self, Exiv2::ifdTagInfo + i));
304
+ }
305
+ for (int i=0; Exiv2::exifTagInfo[i].tag_ != 0xffff; ++i) {
306
+ rb_yield(create_exiv2_tag(self, Exiv2::exifTagInfo + i));
307
+ }
308
+ for (int i=0; Exiv2::iopTagInfo[i].tag_ != 0xffff; ++i) {
309
+ rb_yield(create_exiv2_tag(self, Exiv2::iopTagInfo + i));
310
+ }
311
+ for (int i=0; Exiv2::gpsTagInfo[i].tag_ != 0xffff; ++i) {
312
+ rb_yield(create_exiv2_tag(self, Exiv2::gpsTagInfo + i));
313
+ }
314
+ return self;
315
+ }
316
+
317
+ static VALUE exiv2_iptc_tags_each(VALUE self) {
318
+
319
+ }
320
+ */
290
321
 
291
322
  void Init_exif() {
292
323
  cExif = rb_define_class_under(mExiv2, "Exif", rb_cObject);
@@ -297,4 +328,8 @@ void Init_exif() {
297
328
  rb_define_method(cExif, "clear", VALUEFUNC(exiv2_exif_clear), 0);
298
329
  rb_define_method(cExif, "count", VALUEFUNC(exiv2_exif_count), 0);
299
330
  rb_define_method(cExif, "empty?", VALUEFUNC(exiv2_exif_empty), 0);
331
+ // rb_define_singleton_method(cExif, "exif_tags_each", VALUEFUNC(exiv2_exif_tags_each), 0);
332
+ // rb_define_singleton_method(cExif, "iptc_tags_each", VALUEFUNC(exiv2_iptc_tags_each), 0);
333
+
334
+ cTag = rb_define_class_under(mExiv2, "Tag", rb_cObject);
300
335
  }
data/lib/exiv2.cpp CHANGED
@@ -29,7 +29,7 @@
29
29
  #include "exiv2.hpp"
30
30
 
31
31
 
32
- VALUE mExiv2, cImage, cExif, cIptc, cThumbnail, eError;
32
+ VALUE mExiv2, cImage, cExif, cTag, cIptc, cThumbnail, eError;
33
33
 
34
34
  void rb_exiv2_throw(const char *file, long unsigned int line, const char *fmt, ...) {
35
35
  char* message;
data/lib/exiv2.hpp CHANGED
@@ -43,6 +43,7 @@
43
43
  #include <cstring>
44
44
  #include <cassert>
45
45
 
46
+ #include <stdarg.h>
46
47
 
47
48
 
48
49
  #include "ruby.h"
@@ -88,7 +89,7 @@ void rb_exiv2_throw(const char* file, long unsigned int line, const char *fmt, .
88
89
  extern "C" {
89
90
  #endif
90
91
  void Init_exiv2(void);
91
- extern VALUE mExiv2, cImage, cExif, cIptc, eError;
92
+ extern VALUE mExiv2, cImage, cExif, cTag, cIptc, eError;
92
93
 
93
94
  #if defined(__cplusplus)
94
95
  } /* extern "C" { */
data/lib/image.cpp CHANGED
@@ -132,14 +132,53 @@ static VALUE exiv2_image_exif(VALUE self) {
132
132
  __END
133
133
  }
134
134
 
135
+
136
+ /*
137
+ * Dump thumbnail to file.
138
+ * @img.thumbnail("my_image")
139
+ */
140
+ static VALUE exiv2_image_thumbnail(VALUE self, VALUE file_name) {
141
+ __BEGIN
142
+ Check_Type(file_name, T_STRING);
143
+
144
+ rbImage* image;
145
+ Data_Get_Struct(self, rbImage, image);
146
+
147
+ Exiv2::ExifData &exifData = image->image->exifData();
148
+ exifData.writeThumbnail(STR(file_name));
149
+ if(rb_block_given_p()) {
150
+ rb_yield(file_name);
151
+ }
152
+ return self;
153
+ __END
154
+ }
155
+
156
+ /*
157
+ * Set image thumbnail to contents of passed file
158
+ * @img.thumbnail = "my_image.jpg"
159
+ */
160
+ static VALUE exiv2_image_thumbnail_set(VALUE self, VALUE file_name) {
161
+ __BEGIN
162
+ Check_Type(file_name, T_STRING);
163
+
164
+ rbImage* image;
165
+ Data_Get_Struct(self, rbImage, image);
166
+
167
+ Exiv2::ExifData &exifData = image->image->exifData();
168
+ exifData.setJpegThumbnail(STR(file_name));
169
+ return self;
170
+ __END
171
+ }
172
+
173
+
135
174
  void Init_image() {
136
175
  cImage = rb_define_class_under(mExiv2, "Image", rb_cObject);
137
176
  rb_define_alloc_func(cImage, exiv2_image_s_allocate);
138
177
  rb_define_method(cImage, "initialize", VALUEFUNC(exiv2_image_initialize), 1);
139
178
  rb_define_method(cImage, "exif", VALUEFUNC(exiv2_image_exif), 0);
140
179
 
141
- //rb_define_method(cImage, "thumbnail", VALUEFUNC(exiv2_image_thumbnail), 0);
142
- //rb_define_method(cImage, "thumbnail=", VALUEFUNC(exiv2_image_thumbnail_set), 0);
180
+ rb_define_method(cImage, "thumbnail", VALUEFUNC(exiv2_image_thumbnail), 1);
181
+ rb_define_method(cImage, "thumbnail=", VALUEFUNC(exiv2_image_thumbnail_set), 1);
143
182
 
144
183
  rb_define_method(cImage, "save", VALUEFUNC(exiv2_image_save), 0);
145
184
  rb_define_method(cImage, "clear", VALUEFUNC(exiv2_image_clear), 0);
data/test/image.rb CHANGED
@@ -27,6 +27,9 @@ class ImageTest < Test::Unit::TestCase
27
27
  assert @img = Exiv2::Image.new(image_file), "Image should be opened from IO::File"
28
28
  assert_equal "FinePixS2Pro", @img.exif["Exif.Image.Model"]
29
29
  assert_equal nil, @img.exif["zeze"]
30
+ assert_raise(Exiv2::Error, "Setting of invalid tag should raise an exception") do
31
+ @img.exif["zeze"] = "lala"
32
+ end
30
33
  assert_equal 3024, @img.exif["Exif.Photo.PixelXDimension"]
31
34
  end
32
35
  end
@@ -125,4 +128,11 @@ class ImageTest < Test::Unit::TestCase
125
128
  assert_equal 16, i
126
129
  end
127
130
  end
131
+
132
+ def __test_thumbnail
133
+ open_test_file "exiv2-fujifilm-finepix-s2pro.jpg" do |filename|
134
+ assert @img = Exiv2::Image.new(filename)
135
+
136
+ end
137
+ end
128
138
  end
metadata CHANGED
@@ -1,10 +1,10 @@
1
1
  --- !ruby/object:Gem::Specification
2
- rubygems_version: 0.8.11
2
+ rubygems_version: 0.9.0
3
3
  specification_version: 1
4
4
  name: ruby-exiv2
5
5
  version: !ruby/object:Gem::Version
6
- version: "0.3"
7
- date: 2006-11-07 00:00:00 +03:00
6
+ version: "0.4"
7
+ date: 2006-11-09 00:00:00 +03:00
8
8
  summary: Exiv2 (exif image tags handling) library driver
9
9
  require_paths:
10
10
  - lib
@@ -25,6 +25,7 @@ required_ruby_version: !ruby/object:Gem::Version::Requirement
25
25
  platform: ruby
26
26
  signing_key:
27
27
  cert_chain:
28
+ post_install_message:
28
29
  authors:
29
30
  - Max Lapshin
30
31
  files: