@@ -3,7 +3,6 @@ import Store from "electron-store"
3
3
import { autoUpdater } from "electron-updater"
4
4
import sharp from "sharp"
5
5
import fs from "fs"
6
- import imageSize from "image-size"
7
6
import path from "path"
8
7
import process from "process"
9
8
import waifu2x from "waifu2x"
@@ -301,10 +300,31 @@ const upscale = async (info: any) => {
301
300
meta [ i ] . value = meta [ i ] . value . replaceAll ( "UNICODE" , "" ) . replaceAll ( / \u0000 / g, "" )
302
301
}
303
302
} catch { }
303
+ let avif = false
304
+ let jxl = false
305
+ let sourceExt = path . extname ( info . source )
306
+ if ( path . extname ( info . source ) === ".avif" || path . extname ( info . source ) === ".jxl" ) {
307
+ if ( path . extname ( info . source ) === ".avif" ) avif = true
308
+ if ( path . extname ( info . source ) === ".jxl" ) jxl = true
309
+ const buffer = await sharp ( fs . readFileSync ( info . source ) , { limitInputPixels : false } ) . png ( ) . toBuffer ( )
310
+ const newDest = dest . replace ( path . extname ( dest ) , ".png" )
311
+ fs . writeFileSync ( newDest , buffer )
312
+ info . source = newDest
313
+ dest = newDest
314
+ }
304
315
output = await waifu2x . upscaleImage ( info . source , dest , options , action )
316
+ if ( avif || jxl ) {
317
+ let buffer = sharp ( fs . readFileSync ( dest ) , { limitInputPixels : false } )
318
+ if ( avif ) buffer = buffer . avif ( { quality : options . jpgWebpQuality } )
319
+ if ( jxl ) buffer = buffer . jxl ( { quality : options . jpgWebpQuality } )
320
+ const newDest = dest . replace ( path . extname ( dest ) , sourceExt )
321
+ fs . renameSync ( dest , newDest )
322
+ fs . writeFileSync ( newDest , await buffer . toBuffer ( ) )
323
+ output = newDest
324
+ }
305
325
if ( info . compress ) {
306
326
const inputBuffer = fs . readFileSync ( output )
307
- const outputBuffer = await sharp ( inputBuffer , { limitInputPixels : false } ) . jpeg ( ) . toBuffer ( )
327
+ const outputBuffer = await sharp ( inputBuffer , { limitInputPixels : false } ) . jpeg ( { optimiseScans : true , trellisQuantisation : true , quality : options . jpgWebpQuality } ) . toBuffer ( )
308
328
fs . writeFileSync ( output , outputBuffer )
309
329
const renamePath = path . join ( path . dirname ( output ) , `${ path . basename ( output , path . extname ( output ) ) } .jpg` )
310
330
fs . renameSync ( output , renamePath )
@@ -391,7 +411,7 @@ ipcMain.handle("get-dimensions", async (event, path: string, type: string, optio
391
411
const dimensions = await waifu2x . pdfDimensions ( path , { downscaleHeight : undefined } )
392
412
return { width : dimensions . width , height : dimensions . height , image : dimensions . image }
393
413
} else {
394
- const dimensions = imageSize ( path )
414
+ const dimensions = await sharp ( fs . readFileSync ( path ) , { limitInputPixels : false } ) . metadata ( )
395
415
return { width : dimensions . width , height : dimensions . height }
396
416
}
397
417
} )
@@ -417,8 +437,8 @@ ipcMain.handle("select-files", async () => {
417
437
const files = await dialog . showOpenDialog ( window , {
418
438
filters : [
419
439
{ name : "All Files" , extensions : [ "*" ] } ,
420
- { name : "Images" , extensions : [ "png" , "jpg" , "jpeg" , "webp" , "tiff" ] } ,
421
- { name : "GIF " , extensions : [ "gif" ] } ,
440
+ { name : "Images" , extensions : [ "png" , "jpg" , "jpeg" , "webp" , "avif" , "jxl" , " tiff"] } ,
441
+ { name : "Animations " , extensions : [ "gif" , "webp "] } ,
422
442
{ name : "Videos" , extensions : [ "mp4" , "ogv" , "webm" , "avi" , "mov" , "mkv" , "flv" ] } ,
423
443
{ name : "PDF" , extensions : [ "pdf" ] } ,
424
444
] ,
@@ -464,7 +484,7 @@ if (!singleLock) {
464
484
} )
465
485
466
486
app . on ( "ready" , ( ) => {
467
- window = new BrowserWindow ( { width : 800 , height : 600 , minWidth : 720 , minHeight : 450 , frame : false , backgroundColor : "#5ea8da" , center : true , webPreferences : { nodeIntegration : true , contextIsolation : false } } )
487
+ window = new BrowserWindow ( { width : 800 , height : 600 , minWidth : 720 , minHeight : 450 , frame : false , backgroundColor : "#5ea8da" , center : true , roundedCorners : false , webPreferences : { nodeIntegration : true , contextIsolation : false } } )
468
488
window . loadFile ( path . join ( __dirname , "index.html" ) )
469
489
window . removeMenu ( )
470
490
if ( process . platform !== "win32" ) {
0 commit comments