1
- const fetch = require ( 'node-fetch' ) ;
2
- const { imageSize } = require ( 'image-size' ) ;
1
+ const { probe } = require ( 'probe-image-size' ) ;
2
+ // const fetch = require('node-fetch');
3
+ // const { imageSize } = require('image-size');
3
4
const errorLogger = require ( './error-logger' ) ;
4
5
const { getCache, setCache } = require ( './cache' ) ;
5
6
const defaultDimensions = { width : 600 , height : 400 } ;
6
7
7
- // Minimum required bytes for common image formats (approximate)
8
- const imageMinBytes = {
9
- jpg : 410 ,
10
- png : 33 ,
11
- gif : 14 ,
12
- webp : 30 ,
13
- bmp : 26 ,
14
- default : 256 // Fallback for other image types
15
- } ;
16
-
17
- const probeImage = async url => {
18
- const response = await fetch ( url ) ;
19
- if ( ! response . ok )
20
- throw new Error ( `Failed to fetch image: ${ response . statusText } ` ) ;
8
+ // const probeImage = async url => {
9
+ // const response = await fetch(url);
10
+ // if (!response.ok)
11
+ // throw new Error(`Failed to fetch image: ${response.statusText}`);
21
12
22
- const chunks = [ ] ;
23
- let totalLength = 0 ;
24
- const reader = response . body ;
13
+ // const reader = response.body;
14
+ // let imgBuffer = Buffer.alloc(0);
15
+ // // const maxBufferSize = 3072; // Limit memory usage to 3 KB
16
+ // const maxBufferSize = 1024; // Limit memory usage to 1 KB
25
17
26
- for await ( const chunk of reader ) {
27
- chunks . push ( chunk ) ;
28
- totalLength += chunk . length ;
18
+ // for await (const chunk of reader) {
19
+ // imgBuffer = Buffer.concat([imgBuffer, chunk]);
29
20
30
- try {
31
- const buffer = Buffer . concat ( chunks , totalLength ) ;
21
+ // try {
22
+ // const dimensions = imageSize(imgBuffer);
23
+ // if (dimensions.width && dimensions.height) {
24
+ // response.body.destroy(); // Stop downloading
25
+ // return dimensions;
26
+ // }
27
+ // } catch (err) {
28
+ // // Continue reading if more data is needed
29
+ // }
32
30
33
- // Try to detect image format (first few bytes)
34
- const { type } = imageSize ( buffer ) ;
35
- const minBytes = imageMinBytes [ type ] || imageMinBytes . default ;
31
+ // // Keep memory usage low by trimming old bytes
32
+ // if (imgBuffer.length > maxBufferSize) {
33
+ // imgBuffer = imgBuffer.subarray(imgBuffer.length - maxBufferSize);
34
+ // }
35
+ // }
36
36
37
- // Check buffer length before probing image
38
- if ( buffer . length < minBytes ) continue ;
39
-
40
- // Get dimensions
41
- const dimensions = imageSize ( buffer ) ;
42
- if ( dimensions . width && dimensions . height ) {
43
- response . body . destroy ( ) ; // Stop downloading
44
- return dimensions ;
45
- }
46
- } catch ( err ) {
47
- // Continue reading if more data is needed
48
- }
49
- }
50
-
51
- throw new Error ( 'Could not determine image size' ) ;
52
- } ;
37
+ // throw new Error('Could not determine image size');
38
+ // };
53
39
54
40
const getImageDimensions = async ( url , description ) => {
55
41
try {
@@ -65,7 +51,7 @@ const getImageDimensions = async (url, description) => {
65
51
let imageDimensions = getCache ( url ) ;
66
52
if ( imageDimensions ) return imageDimensions ;
67
53
68
- const res = await probeImage ( url ) ;
54
+ const res = await probe ( url ) ;
69
55
imageDimensions = {
70
56
width : res ?. width ? res ?. width : defaultDimensions . width ,
71
57
height : res ?. height ? res ?. height : defaultDimensions . height
0 commit comments