From 5e0953d7783ce65707fa89f5a773697b69e82e96 Mon Sep 17 00:00:00 2001
From: jianxinhou <51222175+jianxinhou@users.noreply.github.com>
Date: Thu, 1 Dec 2022 10:44:28 +0800
Subject: This closes #1405, add new function SetSheetBackgroundFromBytes
 (#1406)

Co-authored-by: houjianxin.rupert <houjianxin.rupert@bytedance.com>
---
 sheet.go | 27 ++++++++++++++++++++++-----
 1 file changed, 22 insertions(+), 5 deletions(-)

(limited to 'sheet.go')

diff --git a/sheet.go b/sheet.go
index e241abd..bbf529a 100644
--- a/sheet.go
+++ b/sheet.go
@@ -485,23 +485,40 @@ func (f *File) getSheetXMLPath(sheet string) (string, bool) {
 }
 
 // SetSheetBackground provides a function to set background picture by given
-// worksheet name and file path.
+// worksheet name and file path. Supported image types: EMF, EMZ, GIF, JPEG,
+// JPG, PNG, SVG, TIF, TIFF, WMF, and WMZ.
 func (f *File) SetSheetBackground(sheet, picture string) error {
 	var err error
 	// Check picture exists first.
 	if _, err = os.Stat(picture); os.IsNotExist(err) {
 		return err
 	}
-	ext, ok := supportedImageTypes[path.Ext(picture)]
+	file, _ := os.ReadFile(filepath.Clean(picture))
+	return f.setSheetBackground(sheet, path.Ext(picture), file)
+}
+
+// SetSheetBackgroundFromBytes provides a function to set background picture by
+// given worksheet name, extension name and image data. Supported image types:
+// EMF, EMZ, GIF, JPEG, JPG, PNG, SVG, TIF, TIFF, WMF, and WMZ.
+func (f *File) SetSheetBackgroundFromBytes(sheet, extension string, picture []byte) error {
+	if len(picture) == 0 {
+		return ErrParameterInvalid
+	}
+	return f.setSheetBackground(sheet, extension, picture)
+}
+
+// setSheetBackground provides a function to set background picture by given
+// worksheet name, file name extension and image data.
+func (f *File) setSheetBackground(sheet, extension string, file []byte) error {
+	imageType, ok := supportedImageTypes[extension]
 	if !ok {
 		return ErrImgExt
 	}
-	file, _ := os.ReadFile(filepath.Clean(picture))
-	name := f.addMedia(file, ext)
+	name := f.addMedia(file, imageType)
 	sheetXMLPath, _ := f.getSheetXMLPath(sheet)
 	sheetRels := "xl/worksheets/_rels/" + strings.TrimPrefix(sheetXMLPath, "xl/worksheets/") + ".rels"
 	rID := f.addRels(sheetRels, SourceRelationshipImage, strings.Replace(name, "xl", "..", 1), "")
-	if err = f.addSheetPicture(sheet, rID); err != nil {
+	if err := f.addSheetPicture(sheet, rID); err != nil {
 		return err
 	}
 	f.addSheetNameSpace(sheet, SourceRelationship)
-- 
cgit v1.2.1