@@ -51,9 +51,10 @@ func main() {
51
51
52
52
func run (ctx context.Context , name , version string , cliargs []string ) error {
53
53
args := & Args {
54
+ verbose : true ,
54
55
bg : colors .FromColor (color .Transparent ),
55
56
vipsConcurrency : runtime .NumCPU (),
56
- pdfDPI : 300 ,
57
+ dpi : 300 ,
57
58
logger : func (string , ... interface {}) {},
58
59
}
59
60
var (
@@ -101,7 +102,7 @@ func run(ctx context.Context, name, version string, cliargs []string) error {
101
102
// flags.BoolVar(&args.diff, "diff", args.diff, "toggle diff mode")
102
103
flags .UintVarP (& args .width , "width" , "W" , args .width , "set width" )
103
104
flags .UintVarP (& args .height , "height" , "H" , args .height , "set height" )
104
- flags .UintVar (& args .pdfDPI , "dpi" , args .pdfDPI , "set dpi" )
105
+ flags .UintVar (& args .dpi , "dpi" , args .dpi , "set dpi" )
105
106
// completions
106
107
flags .BoolVar (& bashCompletion , "completion-script-bash" , false , "output bash completion script and exit" )
107
108
flags .BoolVar (& zshCompletion , "completion-script-zsh" , false , "output zsh completion script and exit" )
@@ -124,7 +125,7 @@ type Args struct {
124
125
vipsConcurrency int
125
126
width uint
126
127
height uint
127
- pdfDPI uint
128
+ dpi uint
128
129
scaleMode resvg.ScaleMode
129
130
130
131
logger func (string , ... interface {})
@@ -304,6 +305,26 @@ func (args *Args) openMarkdown(name string) (string, image.Image, error) {
304
305
return args .vipsExport (v )
305
306
}
306
307
308
+ // vipsInit initializes the vip package.
309
+ func (args * Args ) vipsInit () {
310
+ start := time .Now ()
311
+ level := vips .LogLevelError
312
+ if args .verbose {
313
+ level = vips .LogLevelDebug
314
+ }
315
+ vips .LoggingSettings (func (domain string , level vips.LogLevel , msg string ) {
316
+ args .logger ("vips %s: %s %s" , vipsLevel (level ), domain , strings .TrimSpace (msg ))
317
+ }, level )
318
+ var config * vips.Config
319
+ if args .vipsConcurrency != 0 {
320
+ config = & vips.Config {
321
+ ConcurrencyLevel : args .vipsConcurrency ,
322
+ }
323
+ }
324
+ vips .Startup (config )
325
+ args .logger ("vips init: %v" , time .Now ().Sub (start ))
326
+ }
327
+
307
328
// vipsOpenReader opens a vips image from the reader.
308
329
func (args * Args ) vipsOpenReader (r io.Reader , name string ) (* vips.ImageRef , error ) {
309
330
args .once .Do (args .vipsInit )
@@ -315,8 +336,8 @@ func (args *Args) vipsOpenReader(r io.Reader, name string) (*vips.ImageRef, erro
315
336
args .logger ("load file: %v" , time .Now ().Sub (start ))
316
337
start = time .Now ()
317
338
p := vips .NewImportParams ()
318
- if args .pdfDPI != 0 {
319
- p .Density .Set (int (args .pdfDPI ))
339
+ if args .dpi != 0 {
340
+ p .Density .Set (int (args .dpi ))
320
341
}
321
342
v , err := vips .LoadImageFromBuffer (buf , p )
322
343
if err != nil {
@@ -351,34 +372,22 @@ func (args *Args) vipsExport(v *vips.ImageRef) (string, image.Image, error) {
351
372
}
352
373
}
353
374
start = time .Now ()
354
- img , err := v .ToImage (& vips.ExportParams {
355
- Format : vips .ImageTypePNG ,
375
+ buf , _ , err := v .ExportPng (& vips.PngExportParams {
376
+ Filter : vips .PngFilterNone ,
377
+ Interlace : false ,
378
+ Palette : true ,
379
+ // Bitdepth: 4,
356
380
})
357
381
if err != nil {
358
382
return "" , nil , fmt .Errorf ("vips can't export %s: %w" , name , err )
359
383
}
360
384
args .logger ("vips export: %v" , time .Now ().Sub (start ))
361
- return "png" , img , nil
362
- }
363
-
364
- // vipsInit initializes the vip package.
365
- func (args * Args ) vipsInit () {
366
- start := time .Now ()
367
- level := vips .LogLevelError
368
- if args .verbose {
369
- level = vips .LogLevelDebug
370
- }
371
- vips .LoggingSettings (func (domain string , level vips.LogLevel , msg string ) {
372
- args .logger ("vips %s: %s %s" , vipsLevel (level ), domain , strings .TrimSpace (msg ))
373
- }, level )
374
- var config * vips.Config
375
- if args .vipsConcurrency != 0 {
376
- config = & vips.Config {
377
- ConcurrencyLevel : args .vipsConcurrency ,
378
- }
385
+ img , _ , err := image .Decode (bytes .NewReader (buf ))
386
+ if err != nil {
387
+ return "" , nil , fmt .Errorf ("can't decode vips image %s: %w" , name , err )
379
388
}
380
- vips . Startup ( config )
381
- args . logger ( "vips init: %v" , time . Now (). Sub ( start ))
389
+ args . logger ( "image type: %T" , img )
390
+ return "png" , img , nil
382
391
}
383
392
384
393
// addBackground adds a background to a image.
0 commit comments