New Case Study:See how Anthropic automated 95% of dependency reviews with Socket.Learn More
Socket
Sign inDemoInstall
Socket

@shumai/image

Package Overview
Dependencies
Maintainers
3
Versions
4
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

@shumai/image - npm Package Compare versions

Comparing version 0.0.1 to 0.0.3

image/binding.c

156

image/index.ts

@@ -1,141 +0,83 @@

import { ptr, read, toArrayBuffer, dlopen, FFIType, suffix } from "bun:ffi";
import { spawn } from "bun";
import * as sm from '@shumai/shumai';
import * as sm from "@shumai/shumai";
import { toArrayBuffer } from "bun:ffi";
import { load } from "./load";
const { stdout } = spawn(['brew', '--prefix', 'libvips'])
const brew_path = (await new Response(stdout).text()).trim()
const libvips_path = `${brew_path}/lib/libvips.${suffix}`;
const vips = await load();
const { symbols } = dlopen(libvips_path, {
vips_image_new_from_memory: {
args: [FFIType.ptr, FFIType.u64, FFIType.i32, FFIType.i32, FFIType.i32, FFIType.i32],
returns: FFIType.ptr,
},
vips_image_new_from_file: {
args: [FFIType.cstring],
returns: FFIType.ptr,
},
vips_image_get_width: {
args: [FFIType.ptr],
returns: FFIType.i32,
},
vips_image_get_height: {
args: [FFIType.ptr],
returns: FFIType.i32,
},
vips_image_get_bands: {
args: [FFIType.ptr],
returns: FFIType.i32,
},
vips_image_write_to_memory: {
args: [FFIType.ptr, FFIType.ptr],
returns: FFIType.ptr,
},
vips_image_write_to_file: {
args: [FFIType.ptr, FFIType.cstring],
returns: FFIType.i32,
},
vips_rotate: {
args: [FFIType.ptr, FFIType.ptr, FFIType.f64],
returns: FFIType.i32,
},
vips_resize: {
args: [FFIType.ptr, FFIType.ptr, FFIType.f64],
returns: FFIType.i32,
},
vips_gaussblur: {
args: [FFIType.ptr, FFIType.ptr, FFIType.f64],
returns: FFIType.i32,
},
vips_sharpen: {
args: [FFIType.ptr, FFIType.ptr, FFIType.f64],
returns: FFIType.i32,
},
vips_sobel: {
args: [FFIType.ptr, FFIType.ptr],
returns: FFIType.i32,
},
vips_canny: {
args: [FFIType.ptr, FFIType.ptr],
returns: FFIType.i32,
},
vips_invert: {
args: [FFIType.ptr, FFIType.ptr],
returns: FFIType.i32,
},
g_free: {
args: [FFIType.ptr],
},
g_object_unref: {
args: [FFIType.ptr],
},
});
function stringToNullTerminated(str) {
const b = new TextEncoder().encode(str);
const null_term_b = new Uint8Array(str.length + 1);
null_term_b.set(b);
return null_term_b;
}
export class Image {
constructor(obj) {
if (typeof(obj) === 'string') {
this.img_ptr = symbols.vips_image_new_from_file(Buffer.from(obj, 'utf-8'))
if (typeof obj === "string") {
this.filename = stringToNullTerminated(obj);
this.img_ptr = vips.from_file(this.filename);
if (this.img_ptr === null) {
throw `Unable to open file: ${obj}`
const error = vips.error();
vips.clear_error();
throw `Error in libvips: ${error}`;
}
} else if (obj.constructor === sm.Tensor) {
if (obj.ndim != 3) {
throw `Expected tensor of rank 3, was given one of rank ${obj.ndim}`
throw `Expected tensor of rank 3, was given one of rank ${obj.ndim}`;
}
// TODO this may need to be saved
const memory = obj.toUint8Array()
this.img_ptr = symbols.vips_image_new_from_memory(memory, memory.length, obj.shape[0], obj.shape[1], obj.shape[2], 1)
this.memory = obj.toUint8Array();
this.img_ptr = vips.from_memory(
this.memory,
this.memory.length,
obj.shape[0],
obj.shape[1],
obj.shape[2]
);
} else if (typeof obj === "number") {
if (obj == 0) {
throw `Invalid input, passed ${obj} as image pointer`;
}
this.img_ptr = obj;
} else {
this.img_ptr = obj
throw `Invalid input: ${obj}`;
}
this.height = symbols.vips_image_get_height(this.img_ptr)
this.width = symbols.vips_image_get_width(this.img_ptr)
this.channel = symbols.vips_image_get_bands(this.img_ptr)
this.height = vips.get_height(this.img_ptr);
this.width = vips.get_width(this.img_ptr);
this.channels = vips.get_bands(this.img_ptr);
}
tensor() {
const size = new BigInt64Array(1);
const memory = symbols.vips_image_write_to_memory(this.img_ptr, size)
const buffer = new Uint8Array(toArrayBuffer(memory, 0, Number(size[0])))
const t = sm.tensor(buffer).reshape([this.width, this.height, this.channel])
symbols.g_free(ptr(buffer))
return t
const memory = vips.to_memory(this.img_ptr, size);
const buffer = new Uint8Array(toArrayBuffer(memory, 0, Number(size[0])));
const t = sm
.tensor(buffer)
.reshape([this.width, this.height, this.channels]);
vips.free_memory(buffer);
return t;
}
save(filename) {
symbols.vips_image_write_to_file(this.img_ptr, Buffer.from(filename, 'utf-8'))
vips.to_file(this.img_ptr, stringToNullTerminated(filename));
}
rotate(deg) {
const buff = new Float64Array(1)
symbols.vips_rotate(this.img_ptr, buff, deg)
return new Image(read.ptr(ptr(buff)))
return new Image(vips.rotate(this.img_ptr, deg));
}
resize(scale) {
const buff = new Float64Array(1)
symbols.vips_resize(this.img_ptr, buff, scale)
return new Image(read.ptr(ptr(buff)))
return new Image(vips.resize(this.img_ptr, scale));
}
gaussblur(sigma) {
const buff = new Float64Array(1)
symbols.vips_gaussblur(this.img_ptr, buff, sigma)
return new Image(read.ptr(ptr(buff)))
return new Image(vips.gaussblur(this.img_ptr, sigma));
}
sharpen(sigma) {
const buff = new Float64Array(1)
symbols.vips_sharpen(this.img_ptr, buff, sigma)
return new Image(read.ptr(ptr(buff)))
return new Image(vips.sharpen(this.img_ptr));
}
sobel() {
const buff = new Float64Array(1)
symbols.vips_sobel(this.img_ptr, buff)
return new Image(read.ptr(ptr(buff)))
return new Image(vips.sobel(this.img_ptr));
}
canny() {
const buff = new Float64Array(1)
symbols.vips_canny(this.img_ptr, buff)
return new Image(read.ptr(ptr(buff)))
return new Image(vips.canny(this.img_ptr));
}
invert() {
const buff = new Float64Array(1)
symbols.vips_invert(this.img_ptr, buff)
return new Image(read.ptr(ptr(buff)))
return new Image(vips.invert(this.img_ptr));
}
}
{
"name": "@shumai/image",
"version": "0.0.1",
"version": "0.0.3",
"module": "image/index.ts",
"type": "module",
"scripts": {
"format": "eslint '**/*.{js,ts}' '*.{js,cjs,ts}' package.json --fix"
},
"files": [
"image/**/*.ts"
"image/**/*.ts",
"image/binding.c"
],

@@ -19,2 +23,14 @@ "keywords": [

],
"devDependencies": {
"@types/node": "^18.11.9",
"@typescript-eslint/eslint-plugin": "^5.42.1",
"@typescript-eslint/parser": "^5.42.1",
"bun-types": "^0.2.2",
"eslint": "^8.27.0",
"eslint-config-prettier": "^8.5.0",
"eslint-plugin-prettier": "^4.2.1",
"eslint-plugin-simple-import-sort": "^8.0.0",
"prettier": "^2.7.1",
"typescript": "^4.8.4"
},
"dependencies": {

@@ -21,0 +37,0 @@ "@shumai/shumai": "^0.0.12-1"

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc