static VALUE png_buf_internal(VALUE obj, VALUE compression, VALUE interlace) { #if IM_MAJOR_VERSION > 7 || IM_MINOR_VERSION >= 23 VipsImage *im_out; char *buf; int length; GetImg(obj, data, im); if (!(im_out = im_open("writer_png_buf", "p"))) vips_lib_error(); if (im_vips2bufpng(im, im_out, NUM2INT(compression), NUM2INT(interlace), &buf, &length)) { im_close(im_out); vips_lib_error(); } im_close(im_out); return rb_tainted_str_new(buf, length); #else rb_raise(eVIPSError, "This method is not implemented in your version of VIPS"); #endif }
static VALUE jpeg_buf_internal(VALUE obj, VALUE quality) { char *buf = NULL; int length; GetImg(obj, data, im); #if ATLEAST_VIPS( 7, 28 ) { size_t len; if (vips_jpegsave_buffer(im, &buf, &len, "Q", NUM2INT(quality), NULL)) vips_lib_error(); /* Argh. */ length = len; } #else if (im_vips2bufjpeg(im, NULL, NUM2INT(quality), &buf, &length)) vips_lib_error(); #endif return rb_tainted_str_new(buf, length); }
static VALUE vips_write_internal(VALUE obj, VALUE path) { VipsImage *im_new; GetImg(obj, data, im); if (!(im_new = (VipsImage *)im_openout(RSTRING_PTR(path)))) vips_lib_error(); if (im_copy(im, im_new)) vips_lib_error(); im_close(im_new); return obj; }
static VALUE csv_write_internal(VALUE obj, VALUE path) { GetImg(obj, data, im); if (im_vips2csv(im, RSTRING_PTR(path))) vips_lib_error(); return obj; }
static VALUE img_cntlines(VALUE obj, int flag) { double nolines; GetImg(obj, data, im); if (im_cntlines(im, &nolines, flag)) vips_lib_error(); return DBL2NUM(nolines); }
VALUE img_convsep(VALUE obj, VALUE mask) { DOUBLEMASK *dmask; INTMASK *imask; GetImg(obj, data, im); OutImg2(obj, mask, new, data_new, im_new); mask_arg2mask(mask, &imask, &dmask); if(imask) { if (im_convsep(im, im_new, imask)) vips_lib_error(); } else if (im_convsep_f(im, im_new, dmask)) vips_lib_error(); return new; }
VALUE img_icc_ac2rc(VALUE obj, VALUE depth, VALUE profile_filename) { GetImg(obj, data, im); OutImg(obj, new, data_new, im_new); if (im_icc_ac2rc(im, im_new, StringValuePtr(profile_filename))) vips_lib_error(); return new; }
VALUE img_rank(VALUE obj, VALUE xsize, VALUE ysize, VALUE order) { GetImg(obj, data, im); OutImg(obj, new, data_new, im_new); if (im_rank(im, im_new, NUM2INT(xsize), NUM2INT(ysize), NUM2INT(order))) vips_lib_error(); return new; }
static VALUE img_profile(VALUE obj, int dir) { GetImg(obj, data, im); OutImg(obj, new, data_new, im_new); if (im_profile(im, im_new, dir)) vips_lib_error(); return new; }
static VALUE img_zerox(VALUE obj, int flag) { GetImg(obj, data, im); OutImg(obj, new, data_new, im_new); if (im_zerox(im, im_new, flag)) vips_lib_error(); return new; }
VALUE img_histnd(VALUE obj, VALUE bins) { GetImg(obj, data, im); OutImg(obj, new, data_new, im_new); if (im_histnD(im, im_new, NUM2INT(bins))) vips_lib_error(); return new; }
VALUE img_addgnoise(VALUE obj, VALUE sigma) { GetImg(obj, data, im); OutImg(obj, new, data_new, im_new); if (im_addgnoise(im, im_new, NUM2INT(sigma))) vips_lib_error(); return new; }
VALUE img_xyz_to_lab_temp(VALUE obj, VALUE x0, VALUE y0, VALUE z0) { GetImg(obj, data, im); OutImg(obj, new, data_new, im_new); if (im_XYZ2Lab_temp(im, im_new, NUM2DBL(x0), NUM2DBL(y0), NUM2DBL(z0))) vips_lib_error(); return new; }
VALUE img_contrast_surface(VALUE obj, VALUE half_win_size, VALUE spacing) { GetImg(obj, data, im); OutImg(obj, new, data_new, im_new); if (im_contrast_surface(im, im_new, NUM2INT(half_win_size), NUM2INT(spacing))) vips_lib_error(); return new; }
VALUE img_label_regions(VALUE obj) { int segments; GetImg(obj, data, im); OutImg(obj, new, data_new, im_new); if (im_label_regions(im, im_new, &segments)) vips_lib_error(); return rb_ary_new3(2, new, segments); }
VALUE img_icc_import_embedded(VALUE obj, VALUE intent) { ID id_intent = SYM2ID(intent); GetImg(obj, data, im); OutImg(obj, new, data_new, im_new); if (im_icc_import_embedded(im, im_new, img_id_to_intent(id_intent))) vips_lib_error(); return new; }
static VALUE writer_write_internal(VALUE obj, VALUE path) { VipsImage *out; GetImg(obj, data, im); if (!(out = im_open(StringValuePtr(path), "w")) || im_copy(im, out)) vips_lib_error(); im_close(out); return obj; }
VALUE img_sharpen(VALUE obj, VALUE mask_size, VALUE x1, VALUE y2, VALUE y3, VALUE m1, VALUE m2) { GetImg(obj, data, im); OutImg(obj, new, data_new, im_new); if (im_sharpen(im, im_new, NUM2INT(mask_size), NUM2DBL(x1), NUM2DBL(y2), NUM2DBL(y3), NUM2DBL(m1), NUM2DBL(m2))) vips_lib_error(); return new; }
static VALUE jpeg_buf_internal(VALUE obj, VALUE quality) { char *buf = NULL; int length; GetImg(obj, data, im); if (im_vips2bufjpeg(im, NULL, NUM2INT(quality), &buf, &length)) vips_lib_error(); return rb_tainted_str_new(buf, length); }
VALUE img_icc_import(VALUE obj, VALUE input_profile_filename, VALUE intent) { ID id_intent = SYM2ID(intent); GetImg(obj, data, im); OutImg(obj, new, data_new, im_new); if (im_icc_import(im, im_new, StringValuePtr(input_profile_filename), img_id_to_intent(id_intent))) vips_lib_error(); return new; }
static VALUE png_buf_internal(VALUE obj, VALUE compression, VALUE interlace) { char *buf; size_t length; GetImg(obj, data, im); #if ATLEAST_VIPS( 7, 28 ) if (vips_pngsave_buffer(im, &buf, &length, "compression", NUM2INT(compression), "interlace", NUM2INT(interlace), NULL)) vips_lib_error(); #elif ATLEAST_VIPS( 7, 23 ) if (im_vips2bufpng(im, NULL, NUM2INT(compression), NUM2INT(interlace), &buf, &length)) vips_lib_error(); #else rb_raise(eVIPSError, "This method is not implemented in your version of VIPS"); #endif return rb_tainted_str_new(buf, length); }
VALUE img_compass(VALUE obj, VALUE mask) { INTMASK *imask; GetImg(obj, data, im); OutImg2(obj, mask, new, data_new, im_new); mask_arg2mask(mask, &imask, NULL); if (im_compass(im, im_new, imask)) vips_lib_error(); return new; }
static VALUE writer_initialize(int argc, VALUE *argv, VALUE obj) { VALUE image, opts; rb_scan_args(argc, argv, "11", &image, &opts); GetImg(image, data, im); GetImg(obj, data_new, im_new); img_add_dep(data_new, image); if (im_copy(im, im_new)) vips_lib_error(); return obj; }
static VALUE jpeg_buf_internal(VALUE obj, VALUE quality) { VipsImage *im_out; char *buf = NULL; int length; VALUE str; GetImg(obj, data, im); if (!(im_out = im_open("writer_jpeg_buf", "p"))) vips_lib_error(); if (im_vips2bufjpeg(im, im_out, NUM2INT(quality), &buf, &length)) { im_close(im_out); vips_lib_error(); } str = rb_tainted_str_new(buf, length); im_close(im_out); return str; }
VALUE img_icc_export_depth(VALUE obj, VALUE depth, VALUE output_profile_filename, VALUE intent) { ID id_intent = SYM2ID(intent); GetImg(obj, data, im); OutImg(obj, new, data_new, im_new); if (im_icc_export_depth(im, im_new, NUM2INT(depth), StringValuePtr(output_profile_filename), img_id_to_intent(id_intent))) vips_lib_error(); return new; }
VALUE img_histgr(int argc, VALUE *argv, VALUE obj) { VALUE v_bandno; int bandno; GetImg(obj, data, im); OutImg(obj, new, data_new, im_new); rb_scan_args(argc, argv, "01", &v_bandno); bandno = NIL_P(v_bandno) ? -1 : NUM2INT(v_bandno); if (im_histgr(im, im_new, bandno)) vips_lib_error(); return new; }
static VALUE writer_meta_set(VALUE obj, const char* name, VALUE str) { GetImg(obj, data, im); size_t len = RSTRING_LEN(str); void *buf = malloc(len); memcpy(buf, RSTRING_PTR(str), len); if (im_meta_set_blob(im, name, (im_callback_fn)xfree, buf, len)) { xfree(buf); vips_lib_error(); } return str; }
VALUE img_lab_morph(VALUE obj, VALUE mask, VALUE l_offset, VALUE l_scale, VALUE a_scale, VALUE b_scale) { DOUBLEMASK *dmask; GetImg(obj, data, im); OutImg(obj, new, data_new, im_new); mask_arg2mask(mask, NULL, &dmask); if( im_lab_morph(im, im_new, dmask, NUM2DBL(l_offset), NUM2DBL(l_scale), NUM2DBL(a_scale), NUM2DBL(b_scale)) ) vips_lib_error(); return new; }
static VALUE png_buf_internal(VALUE obj, VALUE compression, VALUE interlace) { #if IM_MAJOR_VERSION > 7 || IM_MINOR_VERSION >= 23 char *buf; size_t length; GetImg(obj, data, im); if (im_vips2bufpng(im, NULL, NUM2INT(compression), NUM2INT(interlace), &buf, &length)) vips_lib_error(); return rb_tainted_str_new(buf, length); #else rb_raise(eVIPSError, "This method is not implemented in your version of VIPS"); #endif }
VALUE img_rank_image_internal(int argc, VALUE *argv, VALUE obj, int index) { vipsImg *im_t; IMAGE **ins; int i; GetImg(obj, data, im); OutImg(obj, new, data_new, im_new); ins = IM_ARRAY(im_new, argc + 1, IMAGE*); ins[0] = im; for (i = 0; i < argc; i++) { img_add_dep(data_new, argv[i]); Data_Get_Struct(argv[i], vipsImg, im_t); ins[i + 1] = im_t->in; } if (im_rank_image(ins, im_new, argc + 1, index)) vips_lib_error(); return new; }