11import { Readable } from 'stream' ;
2- import { createRequire } from 'module' ;
32import crypto from 'crypto' ;
43import sharp from 'sharp' ;
54import {
@@ -10,34 +9,6 @@ import {
109import brotli from 'brotli' ;
1110import { buffer } from 'stream/consumers' ;
1211
13- const require_ = createRequire ( import . meta. url ) ;
14- const { cv } = require_ ( 'opencv-wasm' ) as {
15- cv : {
16- Mat : new (
17- rows : number ,
18- cols : number ,
19- type : number ,
20- ) => {
21- data : Uint8Array ;
22- rows : number ;
23- cols : number ;
24- channels ( ) : number ;
25- delete ( ) : void ;
26- } ;
27- Size : new ( width : number , height : number ) => unknown ;
28- CV_8UC3 : number ;
29- INTER_LINEAR : number ;
30- resize (
31- src : unknown ,
32- dst : unknown ,
33- size : unknown ,
34- fx : number ,
35- fy : number ,
36- interpolation : number ,
37- ) : void ;
38- } ;
39- } ;
40-
4112/**
4213 * Computes MD5 and SHA1 hashes from a readable stream and resizes any image data.
4314 * @param stream Node.js readable stream (e.g., fs.createReadStream)
@@ -85,29 +56,12 @@ export async function computeHashesFromStream(
8556 if ( resize ) {
8657 const rawBuffer = await buffer ( stream ) ;
8758
88- const decoded = await sharp ( rawBuffer )
59+ data = await sharp ( rawBuffer )
60+ . resize ( 448 , 448 )
8961 . removeAlpha ( )
9062 . raw ( { depth : 'uchar' } )
91- . toBuffer ( { resolveWithObject : true } ) ;
92-
93- const { data : rgbPixels , info } = decoded ;
94-
95- const srcMat = new cv . Mat ( info . height , info . width , cv . CV_8UC3 ) ;
96- srcMat . data . set ( rgbPixels ) ;
63+ . toBuffer ( ) ;
9764
98- const dstMat = new cv . Mat ( 448 , 448 , cv . CV_8UC3 ) ;
99- cv . resize ( srcMat , dstMat , new cv . Size ( 448 , 448 ) , 0 , 0 , cv . INTER_LINEAR ) ;
100-
101- const resizedRgb = Buffer . from ( dstMat . data ) ;
102- srcMat . delete ( ) ;
103- dstMat . delete ( ) ;
104-
105- data = Buffer . alloc ( resizedRgb . length ) ;
106- for ( let i = 0 ; i < resizedRgb . length ; i += 3 ) {
107- data [ i ] = resizedRgb [ i + 2 ] ! ; // B ← R
108- data [ i + 1 ] = resizedRgb [ i + 1 ] ! ; // G ← G
109- data [ i + 2 ] = resizedRgb [ i ] ! ; // R ← B
110- }
11165 imageFormat = ImageFormat . IMAGE_FORMAT_RAW_UINT8_BGR ;
11266 } else {
11367 data = await buffer ( stream ) ;
0 commit comments