Skip to content

Commit c930786

Browse files
committed
high-level api - add watermark
Signed-off-by: George Lemon <[email protected]>
1 parent aa82b75 commit c930786

File tree

6 files changed

+278
-16
lines changed

6 files changed

+278
-16
lines changed

src/libvips/api.nim

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -70,6 +70,14 @@ proc format*(img: ptr VipsImage): VipsBandFormat =
7070
## Get the pixel format of the image.
7171
vips_image_get_format(img)
7272

73+
proc invert*(img: ptr VipsImage): ptr VipsImage =
74+
## Invert the colors of the image.
75+
var res: ptr VipsImage
76+
let rc = vips_invert(img, addr res)
77+
if rc != 0:
78+
raise newException(VipsError, "Failed to invert image")
79+
res
80+
7381
proc resize*(img: ptr VipsImage, scale: float): ptr VipsImage =
7482
## Resize the image by the given scale factor.
7583
var res: ptr VipsImage

src/libvips/bindings/conversion.nim

Lines changed: 64 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -169,131 +169,194 @@ proc c_vips_gamma(input: ptr VipsImage, output: ptr ptr VipsImage): cint {.impor
169169
# Safe wrappers
170170
proc vips_copy*(input: ptr VipsImage, output: ptr ptr VipsImage): cint =
171171
c_vips_copy(input, output, nil)
172+
172173
proc vips_tilecache*(input: ptr VipsImage, output: ptr ptr VipsImage): cint =
173174
c_vips_tilecache(input, output, nil)
175+
174176
proc vips_linecache*(input: ptr VipsImage, output: ptr ptr VipsImage): cint =
175177
c_vips_linecache(input, output, nil)
178+
176179
proc vips_sequential*(input: ptr VipsImage, output: ptr ptr VipsImage): cint =
177180
c_vips_sequential(input, output, nil)
181+
178182
proc vips_copy_file*(input: ptr VipsImage, output: ptr ptr VipsImage): cint =
179183
c_vips_copy_file(input, output, nil)
184+
180185
proc vips_embed*(input: ptr VipsImage, output: ptr ptr VipsImage, x, y, width, height: cint): cint =
181186
c_vips_embed(input, output, x, y, width, height, nil)
187+
182188
proc vips_gravity*(input: ptr VipsImage, output: ptr ptr VipsImage, direction: VipsCompassDirection, width, height: cint): cint =
183189
c_vips_gravity(input, output, direction, width, height, nil)
190+
184191
proc vips_flip*(input: ptr VipsImage, output: ptr ptr VipsImage, direction: VipsDirection): cint =
185192
c_vips_flip(input, output, direction, nil)
193+
186194
proc vips_insert*(main, sub: ptr VipsImage, output: ptr ptr VipsImage, x, y: cint): cint =
187195
c_vips_insert(main, sub, output, x, y, nil)
196+
188197
proc vips_join*(in1, in2: ptr VipsImage, output: ptr ptr VipsImage, direction: VipsDirection): cint =
189198
c_vips_join(in1, in2, output, direction, nil)
199+
190200
proc vips_arrayjoin*(input: ptr ptr VipsImage, output: ptr ptr VipsImage, n: cint): cint =
191201
c_vips_arrayjoin(input, output, n, nil)
202+
192203
proc vips_extract_area*(input: ptr VipsImage, output: ptr ptr VipsImage, left, top, width, height: cint): cint =
193204
c_vips_extract_area(input, output, left, top, width, height, nil)
205+
194206
proc vips_crop*(input: ptr VipsImage, output: ptr ptr VipsImage, left, top, width, height: cint): cint =
195207
c_vips_crop(input, output, left, top, width, height, nil)
208+
196209
proc vips_smartcrop*(input: ptr VipsImage, output: ptr ptr VipsImage, width, height: cint): cint =
197210
c_vips_smartcrop(input, output, width, height, nil)
211+
198212
proc vips_extract_band*(input: ptr VipsImage, output: ptr ptr VipsImage, band: cint): cint =
199213
c_vips_extract_band(input, output, band, nil)
214+
200215
proc vips_replicate*(input: ptr VipsImage, output: ptr ptr VipsImage, across, down: cint): cint =
201216
c_vips_replicate(input, output, across, down, nil)
217+
202218
proc vips_grid*(input: ptr VipsImage, output: ptr ptr VipsImage, tile_height, across, down: cint): cint =
203219
c_vips_grid(input, output, tile_height, across, down, nil)
220+
204221
proc vips_transpose3d*(input: ptr VipsImage, output: ptr ptr VipsImage): cint =
205222
c_vips_transpose3d(input, output, nil)
223+
206224
proc vips_wrap*(input: ptr VipsImage, output: ptr ptr VipsImage): cint =
207225
c_vips_wrap(input, output, nil)
226+
208227
proc vips_rot*(input: ptr VipsImage, output: ptr ptr VipsImage, angle: VipsAngle): cint =
209228
c_vips_rot(input, output, angle, nil)
229+
210230
proc vips_rot90*(input: ptr VipsImage, output: ptr ptr VipsImage): cint =
211231
c_vips_rot90(input, output, nil)
232+
212233
proc vips_rot180*(input: ptr VipsImage, output: ptr ptr VipsImage): cint =
213234
c_vips_rot180(input, output, nil)
235+
214236
proc vips_rot270*(input: ptr VipsImage, output: ptr ptr VipsImage): cint =
215237
c_vips_rot270(input, output, nil)
238+
216239
proc vips_rot45*(input: ptr VipsImage, output: ptr ptr VipsImage): cint =
217240
c_vips_rot45(input, output, nil)
241+
218242
proc vips_autorot_remove_angle*(image: ptr VipsImage) =
219243
c_vips_autorot_remove_angle(image)
220244
proc vips_autorot*(input: ptr VipsImage, output: ptr ptr VipsImage): cint =
221245
c_vips_autorot(input, output, nil)
246+
222247
proc vips_zoom*(input: ptr VipsImage, output: ptr ptr VipsImage, xfac, yfac: cint): cint =
223248
c_vips_zoom(input, output, xfac, yfac, nil)
249+
224250
proc vips_subsample*(input: ptr VipsImage, output: ptr ptr VipsImage, xfac, yfac: cint): cint =
225251
c_vips_subsample(input, output, xfac, yfac, nil)
252+
226253
proc vips_cast*(input: ptr VipsImage, output: ptr ptr VipsImage, format: VipsBandFormat): cint =
227254
c_vips_cast(input, output, format, nil)
255+
228256
proc vips_cast_uchar*(input: ptr VipsImage, output: ptr ptr VipsImage): cint =
229257
c_vips_cast_uchar(input, output, nil)
258+
230259
proc vips_cast_char*(input: ptr VipsImage, output: ptr ptr VipsImage): cint =
231260
c_vips_cast_char(input, output, nil)
261+
232262
proc vips_cast_ushort*(input: ptr VipsImage, output: ptr ptr VipsImage): cint =
233263
c_vips_cast_ushort(input, output, nil)
264+
234265
proc vips_cast_short*(input: ptr VipsImage, output: ptr ptr VipsImage): cint =
235266
c_vips_cast_short(input, output, nil)
267+
236268
proc vips_cast_uint*(input: ptr VipsImage, output: ptr ptr VipsImage): cint =
237269
c_vips_cast_uint(input, output, nil)
270+
238271
proc vips_cast_int*(input: ptr VipsImage, output: ptr ptr VipsImage): cint =
239272
c_vips_cast_int(input, output, nil)
273+
240274
proc vips_cast_float*(input: ptr VipsImage, output: ptr ptr VipsImage): cint =
241275
c_vips_cast_float(input, output, nil)
276+
242277
proc vips_cast_double*(input: ptr VipsImage, output: ptr ptr VipsImage): cint =
243278
c_vips_cast_double(input, output, nil)
279+
244280
proc vips_cast_complex*(input: ptr VipsImage, output: ptr ptr VipsImage): cint =
245281
c_vips_cast_complex(input, output, nil)
282+
246283
proc vips_cast_dpcomplex*(input: ptr VipsImage, output: ptr ptr VipsImage): cint =
247284
c_vips_cast_dpcomplex(input, output, nil)
285+
248286
proc vips_scale*(input: ptr VipsImage, output: ptr ptr VipsImage): cint =
249287
c_vips_scale(input, output, nil)
288+
250289
proc vips_msb*(input: ptr VipsImage, output: ptr ptr VipsImage): cint =
251290
c_vips_msb(input, output, nil)
291+
252292
proc vips_byteswap*(input: ptr VipsImage, output: ptr ptr VipsImage): cint =
253293
c_vips_byteswap(input, output, nil)
294+
254295
proc vips_bandjoin*(input: ptr ptr VipsImage, output: ptr ptr VipsImage, n: cint): cint =
255296
c_vips_bandjoin(input, output, n, nil)
297+
256298
proc vips_bandjoin2*(in1, in2: ptr VipsImage, output: ptr ptr VipsImage): cint =
257299
c_vips_bandjoin2(in1, in2, output, nil)
300+
258301
proc vips_bandjoin_const*(input: ptr VipsImage, output: ptr ptr VipsImage, c: ptr cdouble, n: cint): cint =
259302
c_vips_bandjoin_const(input, output, c, n, nil)
303+
260304
proc vips_bandjoin_const1*(input: ptr VipsImage, output: ptr ptr VipsImage, c: cdouble): cint =
261305
c_vips_bandjoin_const1(input, output, c, nil)
306+
262307
proc vips_bandrank*(input: ptr ptr VipsImage, output: ptr ptr VipsImage, n: cint): cint =
263308
c_vips_bandrank(input, output, n, nil)
309+
264310
proc vips_bandfold*(input: ptr VipsImage, output: ptr ptr VipsImage): cint =
265311
c_vips_bandfold(input, output, nil)
312+
266313
proc vips_bandunfold*(input: ptr VipsImage, output: ptr ptr VipsImage): cint =
267314
c_vips_bandunfold(input, output, nil)
315+
268316
proc vips_bandbool*(input: ptr VipsImage, output: ptr ptr VipsImage, boolean: VipsOperationBoolean): cint =
269317
c_vips_bandbool(input, output, boolean, nil)
318+
270319
proc vips_bandand*(input: ptr VipsImage, output: ptr ptr VipsImage): cint =
271320
c_vips_bandand(input, output, nil)
321+
272322
proc vips_bandor*(input: ptr VipsImage, output: ptr ptr VipsImage): cint =
273323
c_vips_bandor(input, output, nil)
324+
274325
proc vips_bandeor*(input: ptr VipsImage, output: ptr ptr VipsImage): cint =
275326
c_vips_bandeor(input, output, nil)
327+
276328
proc vips_bandmean*(input: ptr VipsImage, output: ptr ptr VipsImage): cint =
277329
c_vips_bandmean(input, output, nil)
330+
278331
proc vips_recomb*(input: ptr VipsImage, output: ptr ptr VipsImage, m: ptr VipsImage): cint =
279332
c_vips_recomb(input, output, m, nil)
333+
280334
proc vips_ifthenelse*(cond, in1, in2: ptr VipsImage, output: ptr ptr VipsImage): cint =
281335
c_vips_ifthenelse(cond, in1, in2, output, nil)
336+
282337
proc vips_switch*(tests: ptr ptr VipsImage, output: ptr ptr VipsImage, n: cint): cint =
283338
c_vips_switch(tests, output, n, nil)
339+
284340
proc vips_flatten*(input: ptr VipsImage, output: ptr ptr VipsImage): cint =
285341
c_vips_flatten(input, output, nil)
342+
286343
proc vips_addalpha*(input: ptr VipsImage, output: ptr ptr VipsImage): cint =
287344
c_vips_addalpha(input, output, nil)
345+
288346
proc vips_premultiply*(input: ptr VipsImage, output: ptr ptr VipsImage): cint =
289347
c_vips_premultiply(input, output, nil)
348+
290349
proc vips_unpremultiply*(input: ptr VipsImage, output: ptr ptr VipsImage): cint =
291350
c_vips_unpremultiply(input, output, nil)
351+
292352
proc vips_composite*(input: ptr ptr VipsImage, output: ptr ptr VipsImage, n: cint, mode: ptr cint): cint =
293353
c_vips_composite(input, output, n, mode, nil)
354+
294355
proc vips_composite2*(base, overlay: ptr VipsImage, output: ptr ptr VipsImage, mode: VipsBlendMode): cint =
295356
c_vips_composite2(base, overlay, output, mode, nil)
357+
296358
proc vips_falsecolour*(input: ptr VipsImage, output: ptr ptr VipsImage): cint =
297359
c_vips_falsecolour(input, output, nil)
360+
298361
proc vips_gamma*(input: ptr VipsImage, output: ptr ptr VipsImage): cint =
299-
c_vips_gamma(input, output, nil)
362+
c_vips_gamma(input, output, nil)

src/libvips/bindings/image.nim

Lines changed: 7 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -96,12 +96,12 @@ type
9696
# Raw varargs imports
9797
proc c_vips_image_new_from_file(name: cstring): ptr VipsImage {.cdecl, importc: "vips_image_new_from_file", varargs.}
9898
proc c_vips_image_write_to_file(img: ptr VipsImage, fname: cstring): cint {.cdecl, importc: "vips_image_write_to_file", varargs.}
99-
proc c_vips_image_new_from_buffer(buf: pointer, len: csize_t, option_string: cstring, args: varargs[pointer]): ptr VipsImage {.cdecl, importc: "vips_image_new_from_buffer", varargs.}
100-
proc c_vips_image_new_from_source(source: ptr VipsSource, option_string: cstring, args: varargs[pointer]): ptr VipsImage {.cdecl, importc: "vips_image_new_from_source", varargs.}
101-
proc c_vips_image_write_to_buffer(img: ptr VipsImage, suffix: cstring, buf: ptr pointer, size: ptr csize_t, args: varargs[pointer]): cint {.cdecl, importc: "vips_image_write_to_buffer", varargs.}
102-
proc c_vips_image_write_to_target(img: ptr VipsImage, suffix: cstring, target: ptr VipsTarget, args: varargs[pointer]): cint {.cdecl, importc: "vips_image_write_to_target", varargs.}
103-
proc c_vips_system(cmd_format: cstring, args: varargs[pointer]): cint {.cdecl, importc: "vips_system", varargs.}
104-
proc c_vips_array_image_newv(n: cint, args: varargs[pointer]): ptr VipsArrayImage {.cdecl, importc: "vips_array_image_newv", varargs.}
99+
proc c_vips_image_new_from_buffer(buf: pointer, len: csize_t, option_string: cstring): ptr VipsImage {.cdecl, importc: "vips_image_new_from_buffer", varargs.}
100+
proc c_vips_image_new_from_source(source: ptr VipsSource, option_string: cstring): ptr VipsImage {.cdecl, importc: "vips_image_new_from_source", varargs.}
101+
proc c_vips_image_write_to_buffer(img: ptr VipsImage, suffix: cstring, buf: ptr pointer, size: ptr csize_t): cint {.cdecl, importc: "vips_image_write_to_buffer", varargs.}
102+
proc c_vips_image_write_to_target(img: ptr VipsImage, suffix: cstring, target: ptr VipsTarget): cint {.cdecl, importc: "vips_image_write_to_target", varargs.}
103+
proc c_vips_system(cmd_format: cstring): cint {.cdecl, importc: "vips_system", varargs.}
104+
proc c_vips_array_image_newv(n: cint): ptr VipsArrayImage {.cdecl, importc: "vips_array_image_newv", varargs.}
105105

106106
# Safe, exported wrappers
107107
proc vips_image_new_from_file*(fname: cstring): ptr VipsImage =
@@ -128,7 +128,7 @@ proc vips_system*(cmd_format: cstring): cint =
128128
proc vips_array_image_newv*(n: cint): ptr VipsArrayImage =
129129
c_vips_array_image_newv(n, nil)
130130

131-
{.push cdecl, importc, header: "vips/image.h".}
131+
{.push cdecl, importc, header: "vips/vips.h".} # should be `vips/header.h` but the compiler complains about missing types
132132
proc vips_image_get_type*(): culong
133133
proc vips_progress_set*(progress: gboolean)
134134
proc vips_image_invalidate_all*(image: ptr VipsImage)
@@ -146,8 +146,6 @@ proc vips_image_new_from_file_RW*(filename: cstring): ptr VipsImage
146146
proc vips_image_new_from_file_raw*(filename: cstring, xsize, ysize, bands: cint, offset: guint64): ptr VipsImage
147147
proc vips_image_new_from_memory*(data: pointer, size: csize_t, width, height, bands: cint, format: VipsBandFormat): ptr VipsImage
148148
proc vips_image_new_from_memory_copy*(data: pointer, size: csize_t, width, height, bands: cint, format: VipsBandFormat): ptr VipsImage
149-
proc vips_image_new_from_buffer*(buf: pointer, len: csize_t, option_string: cstring, args: varargs[pointer]): ptr VipsImage
150-
proc vips_image_new_from_source*(source: ptr VipsSource, option_string: cstring, args: varargs[pointer]): ptr VipsImage
151149
proc vips_image_new_matrix*(width, height: cint): ptr VipsImage
152150
proc vips_image_new_matrixv*(width, height: cint, args: varargs[cdouble]): ptr VipsImage
153151
proc vips_image_new_matrix_from_array*(width, height: cint, array: ptr cdouble, size: cint): ptr VipsImage
@@ -158,8 +156,6 @@ proc vips_image_set_delete_on_close*(image: ptr VipsImage, delete_on_close: gboo
158156
proc vips_get_disc_threshold*(): guint64
159157
proc vips_image_new_temp_file*(format: cstring): ptr VipsImage
160158
proc vips_image_write*(image: ptr VipsImage, outImg: ptr VipsImage): cint
161-
proc vips_image_write_to_buffer*(img: ptr VipsImage, suffix: cstring, buf: ptr pointer, size: ptr csize_t, args: varargs[pointer]): cint
162-
proc vips_image_write_to_target*(img: ptr VipsImage, suffix: cstring, target: ptr VipsTarget, args: varargs[pointer]): cint
163159
proc vips_image_write_to_memory*(img: ptr VipsImage, size: ptr csize_t): pointer
164160
proc vips_image_decode_predict*(img: ptr VipsImage, bands: ptr cint, format: ptr VipsBandFormat): cint
165161
proc vips_image_decode*(img: ptr VipsImage, outImg: ptr ptr VipsImage): cint
@@ -180,9 +176,7 @@ proc vips_band_format_isuint*(format: VipsBandFormat): gboolean
180176
proc vips_band_format_is8bit*(format: VipsBandFormat): gboolean
181177
proc vips_band_format_isfloat*(format: VipsBandFormat): gboolean
182178
proc vips_band_format_iscomplex*(format: VipsBandFormat): gboolean
183-
proc vips_system*(cmd_format: cstring, args: varargs[pointer]): cint
184179
proc vips_array_image_new*(array: ptr ptr VipsImage, n: cint): ptr VipsArrayImage
185-
proc vips_array_image_newv*(n: cint, args: varargs[pointer]): ptr VipsArrayImage
186180
proc vips_array_image_new_from_string*(str: cstring, flags: VipsAccess): ptr VipsArrayImage
187181
proc vips_array_image_empty*(): ptr VipsArrayImage
188182
proc vips_array_image_append*(array: ptr VipsArrayImage, image: ptr VipsImage): ptr VipsArrayImage

0 commit comments

Comments
 (0)