@@ -10,7 +10,7 @@ interface ImageInfo {
1010 raw : boolean ;
1111}
1212
13- interface ProcessedImage {
13+ interface ModifiedImage {
1414 title : string ;
1515 previewUrl : string ;
1616 sizeKb : number ;
@@ -24,7 +24,7 @@ interface ProcessedImage {
2424export async function POST ( req : NextRequest ) {
2525 try {
2626 const formData = await req . formData ( ) ;
27- const processedImages : ProcessedImage [ ] = [ ] ;
27+ const modifiedImages : ModifiedImage [ ] = [ ] ;
2828
2929 // Iterate through formData entries
3030 for ( const [ key , value ] of formData . entries ( ) ) {
@@ -35,42 +35,45 @@ export async function POST(req: NextRequest) {
3535 formData . get ( `modification${ index } ` ) as string ,
3636 ) as ImageInfo ;
3737
38- const processedImage = await processImage ( imageFile , imageInfo ) ;
39- processedImages . push ( processedImage ) ;
38+ const modifiedImage = await modifyImage ( imageFile , imageInfo ) ;
39+ modifiedImages . push ( modifiedImage ) ;
4040 }
4141 }
4242
43- return NextResponse . json ( processedImages ) ;
43+ return NextResponse . json ( modifiedImages ) ;
4444 } catch ( error ) {
45- console . error ( "Error processing images:" , error ) ;
45+ console . error ( "Error modifying images:" , error ) ;
4646 return NextResponse . json (
47- { error : "Failed to process images" } ,
47+ { error : "Failed to modify images" } ,
4848 { status : 500 } ,
4949 ) ;
5050 }
5151}
5252
53- async function processImage (
53+ async function modifyImage (
5454 imageFile : File ,
5555 imageInfo : ImageInfo ,
56- ) : Promise < ProcessedImage > {
56+ ) : Promise < ModifiedImage > {
5757 const fileBuffer = await imageFile . arrayBuffer ( ) ;
58- const image = sharp ( Buffer . from ( fileBuffer ) , { animated : false } ) ;
5958
60- const metadata = await image . metadata ( ) ;
6159 const raw = imageInfo . raw ;
6260 const outputTitle = imageInfo . title ;
6361 let outputWidth ;
6462 let outputHeight ;
6563 let outputFormat ;
6664 let quality ;
65+ let imageBuffer ;
66+ let modifiedInfo ;
6767
6868 if ( raw ) {
69- outputHeight = metadata . height ;
70- outputWidth = metadata . width ;
71- outputFormat = metadata . format ;
72- quality = 100 ;
69+ imageBuffer = fileBuffer ;
70+ outputHeight = imageInfo . height ! ;
71+ outputWidth = imageInfo . width ! ;
72+ outputFormat = imageInfo . format ;
7373 } else {
74+ const image = sharp ( Buffer . from ( fileBuffer ) , { animated : false } ) ;
75+ const metadata = await image . metadata ( ) ;
76+
7477 if ( ! imageInfo . height && ! imageInfo . width ) {
7578 outputHeight = metadata . height ;
7679 outputWidth = metadata . width ;
@@ -83,28 +86,37 @@ async function processImage(
8386
8487 outputFormat = imageInfo . format ?? metadata . format ;
8588 quality = imageInfo . quality ;
86- }
8789
88- if ( ! raw ) {
8990 image
9091 . resize ( outputWidth , outputHeight )
9192 . toFormat ( outputFormat as keyof sharp . FormatEnum , {
9293 quality,
9394 } ) ;
94- }
9595
96- const { data : processedImageBuffer , info } = await image . toBuffer ( {
97- resolveWithObject : true ,
98- } ) ;
96+ const {
97+ data,
98+ info,
99+ } : {
100+ data : Buffer ;
101+ info : { height : number ; width : number ; format : string } ;
102+ } = await image . toBuffer ( {
103+ resolveWithObject : true ,
104+ } ) ;
105+
106+ modifiedInfo = info ;
107+ imageBuffer = data ;
108+
109+ outputHeight = modifiedInfo . height ;
110+ outputWidth = modifiedInfo . width ;
111+ outputFormat = modifiedInfo . format ;
112+ }
99113
100- outputHeight = info . height ;
101- outputWidth = info . width ;
102- outputFormat = info . format ;
114+ const buffer = Buffer . from ( imageBuffer ) . toString ( "base64" ) ;
103115
104116 return {
105117 title : outputTitle ,
106- previewUrl : `data:image/${ outputFormat } ;base64,${ processedImageBuffer . toString ( "base64" ) } ` ,
107- sizeKb : processedImageBuffer . length / 1024 ,
118+ previewUrl : `data:image/${ outputFormat } ;base64,${ buffer } ` ,
119+ sizeKb : imageBuffer . byteLength / 1024 ,
108120 format : outputFormat ,
109121 height : outputHeight ,
110122 width : outputWidth ,
0 commit comments