summaryrefslogtreecommitdiff
path: root/contrib
diff options
context:
space:
mode:
authorKurt <kurt.w.jung@gmail.com>2016-11-10 12:33:16 -0500
committerKurt <kurt.w.jung@gmail.com>2016-11-10 12:33:16 -0500
commit3da37926268f1057e411f5f5a1cff94fc55329ed (patch)
tree4cc5c6a26607a84415f945153ca9f3d983423c66 /contrib
parent0002baf4ceec3fa0a7c935e7205d5364c0adbaa5 (diff)
Support standard tiff images
Diffstat (limited to 'contrib')
-rw-r--r--contrib/tiff/tiff.go71
-rw-r--r--contrib/tiff/tiff_test.go22
2 files changed, 93 insertions, 0 deletions
diff --git a/contrib/tiff/tiff.go b/contrib/tiff/tiff.go
new file mode 100644
index 0000000..c2880d6
--- /dev/null
+++ b/contrib/tiff/tiff.go
@@ -0,0 +1,71 @@
+/*
+ * Copyright (c) 2016 Kurt Jung (Gmail: kurt.w.jung)
+ *
+ * Permission to use, copy, modify, and distribute this software for any
+ * purpose with or without fee is hereby granted, provided that the above
+ * copyright notice and this permission notice appear in all copies.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+ * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+ * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+ * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+ * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+ * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+ */
+
+package tiff
+
+import (
+ "bytes"
+ "fmt"
+ "image"
+ "image/png"
+ "io"
+ "os"
+
+ "github.com/jung-kurt/gofpdf"
+ "golang.org/x/image/tiff"
+)
+
+// RegisterReader ...
+func RegisterReader(fpdf *gofpdf.Fpdf, imgName string, options gofpdf.ImageOptions, r io.Reader) (info *gofpdf.ImageInfoType) {
+ var err error
+ var img image.Image
+ var buf bytes.Buffer
+ if fpdf.Ok() {
+ if options.ImageType == "tiff" || options.ImageType == "tif" {
+ img, err = tiff.Decode(r)
+ if err == nil {
+ err = png.Encode(&buf, img)
+ if err == nil {
+ options.ImageType = "png"
+ info = fpdf.RegisterImageOptionsReader(imgName, options, &buf)
+ }
+ }
+ } else {
+ err = fmt.Errorf("expecting \"tiff\" or \"tif\" as image type, got \"%s\"", options.ImageType)
+ }
+ if err != nil {
+ fpdf.SetError(err)
+ }
+ }
+ return
+}
+
+// RegisterFile ...
+func RegisterFile(fpdf *gofpdf.Fpdf, imgName string, options gofpdf.ImageOptions, tiffFileStr string) (info *gofpdf.ImageInfoType) {
+ var f *os.File
+ var err error
+
+ if fpdf.Ok() {
+ f, err = os.Open(tiffFileStr)
+ if err == nil {
+ info = RegisterReader(fpdf, imgName, options, f)
+ f.Close()
+ } else {
+ fpdf.SetError(err)
+ }
+ }
+ return
+}
diff --git a/contrib/tiff/tiff_test.go b/contrib/tiff/tiff_test.go
new file mode 100644
index 0000000..28163a0
--- /dev/null
+++ b/contrib/tiff/tiff_test.go
@@ -0,0 +1,22 @@
+package tiff_test
+
+import (
+ "github.com/jung-kurt/gofpdf"
+ "github.com/jung-kurt/gofpdf/contrib/tiff"
+ "github.com/jung-kurt/gofpdf/internal/example"
+)
+
+func ExampleTiff() {
+ pdf := gofpdf.New("L", "mm", "A4", "")
+ pdf.SetFont("Helvetica", "", 12)
+ pdf.SetFillColor(200, 200, 220)
+ pdf.AddPageFormat("L", gofpdf.SizeType{Wd: 200, Ht: 200})
+ opt := gofpdf.ImageOptions{ImageType: "tiff", ReadDpi: false}
+ _ = tiff.RegisterFile(pdf, "sample", opt, "../../image/golang-gopher.tiff")
+ pdf.Image("sample", 0, 0, 200, 200, false, "", 0, "")
+ fileStr := example.Filename("Fpdf_Contrib_Tiff")
+ err := pdf.OutputFileAndClose(fileStr)
+ example.Summary(err, fileStr)
+ // Output:
+ // Successfully generated ../../pdf/Fpdf_Contrib_Tiff.pdf
+}