7
7
"fmt"
8
8
"image"
9
9
"image/color"
10
+ "image/draw"
10
11
"io"
11
12
"os"
12
13
"path/filepath"
@@ -111,7 +112,7 @@ func do(w io.Writer, bg color.Color, args []string) error {
111
112
}
112
113
files = append (files , v ... )
113
114
}
114
- return render (w , files )
115
+ return render (w , bg , files )
115
116
}
116
117
117
118
func open (name string ) ([]string , error ) {
@@ -138,36 +139,49 @@ func open(name string) ([]string, error) {
138
139
139
140
var extRE = regexp .MustCompile (`(?i)\.(jpe?g|gif|png|svg|bmp|bitmap|tiff?|hei[vc]|webp)$` )
140
141
141
- func render (w io.Writer , files []string ) error {
142
+ func render (w io.Writer , bg color.Color , files []string ) error {
143
+ var c color.Color
144
+ if ! colors .Is (bg , colors .Transparent ) {
145
+ c = color .NRGBAModel .Convert (bg ).(color.NRGBA )
146
+ }
142
147
for i := 0 ; i < len (files ); i ++ {
143
- if err := renderFile (w , files [i ]); err != nil {
148
+ if err := renderFile (w , c , files [i ]); err != nil {
144
149
fmt .Fprintf (w , "error: unable to render arg %d: %v\n " , i , err )
145
150
}
146
151
}
147
152
return nil
148
153
}
149
154
150
155
// doFile renders the specified file to w.
151
- func renderFile (w io.Writer , file string ) error {
156
+ func renderFile (w io.Writer , bg color. Color , file string ) error {
152
157
fmt .Fprintln (w , file + ":" )
153
158
f , err := os .OpenFile (file , os .O_RDONLY , 0 )
154
159
if err != nil {
155
160
return fmt .Errorf ("can't open %s: %w" , file , err )
156
161
}
157
- img , _ , err := image .Decode (f )
162
+ img , typ , err := image .Decode (f )
158
163
if err != nil {
159
164
defer f .Close ()
160
165
return fmt .Errorf ("can't decode %s: %w" , file , err )
161
166
}
162
167
if err := f .Close (); err != nil {
163
168
return fmt .Errorf ("can't close %s: %w" , file , err )
164
169
}
170
+ if typ != "svg" && bg != nil {
171
+ img = addBackground (bg .(color.NRGBA ), img )
172
+ }
165
173
return rasterm .Encode (w , img )
166
174
}
167
175
168
- /*
169
- func init() {
170
- _ "github.com/jcbritobr/pnm"
171
- image.RegisterFormat("pbm", "P?", Decode, DecodeConfig)
176
+ // addBackground adds a background for the image.
177
+ func addBackground (bg color.NRGBA , fg image.Image ) image.Image {
178
+ b := fg .Bounds ()
179
+ img := image .NewNRGBA (b )
180
+ for i := 0 ; i < b .Dx (); i ++ {
181
+ for j := 0 ; j < b .Dy (); j ++ {
182
+ img .SetNRGBA (i , j , bg )
183
+ }
184
+ }
185
+ draw .Draw (img , b , fg , image.Point {}, draw .Over )
186
+ return img
172
187
}
173
- */
0 commit comments