From c64221a74c2465da427ed11bc6cc0c1d8d430ad1 Mon Sep 17 00:00:00 2001 From: Adrian Shum Date: Wed, 28 Aug 2024 22:05:47 +0800 Subject: [PATCH] feat(vips): strip_metadata() filter and vips-strip-metadata config (#475) * strip metadata if `strip_exif` for webp and avif TODO: add support for other format * strip_metadata() filter and vips-strip-metadata config * test cases * test: update golden files --------- Co-authored-by: Liu Dongmiao --- README.md | 3 +++ config/vipsconfig/vipsconfig.go | 3 +++ .../golden/fit-in/67x67/dancing-banana.gif | Bin 0 -> 13165 bytes testdata/golden/fit-in/67x67/demo1.jpg | Bin 0 -> 1768 bytes testdata/golden/fit-in/67x67/demo3.webp | Bin 0 -> 11230 bytes .../dancing-banana.gif | Bin 0 -> 13165 bytes .../filters%3Astrip_metadata%28%29/demo1.jpg | Bin 0 -> 1768 bytes .../filters%3Astrip_metadata%28%29/demo3.webp | Bin 0 -> 11230 bytes .../gopher.tiff | Bin 0 -> 5624 bytes testdata/golden/fit-in/67x67/gopher-front.png | Bin 0 -> 4283 bytes testdata/golden/fit-in/67x67/gopher.tiff | Bin 0 -> 5624 bytes vips/option.go | 7 ++++++ vips/option_test.go | 2 ++ vips/process.go | 23 +++++++++++++++--- vips/processor.go | 3 ++- vips/processor_test.go | 22 +++++++++++++++++ 16 files changed, 58 insertions(+), 5 deletions(-) create mode 100644 testdata/golden/fit-in/67x67/dancing-banana.gif create mode 100644 testdata/golden/fit-in/67x67/demo1.jpg create mode 100644 testdata/golden/fit-in/67x67/demo3.webp create mode 100644 testdata/golden/fit-in/67x67/filters%3Astrip_metadata%28%29/dancing-banana.gif create mode 100644 testdata/golden/fit-in/67x67/filters%3Astrip_metadata%28%29/demo1.jpg create mode 100644 testdata/golden/fit-in/67x67/filters%3Astrip_metadata%28%29/demo3.webp create mode 100644 testdata/golden/fit-in/67x67/filters%3Astrip_metadata%28%29/gopher.tiff create mode 100644 testdata/golden/fit-in/67x67/gopher-front.png create mode 100644 testdata/golden/fit-in/67x67/gopher.tiff diff --git a/README.md b/README.md index c7702163f..2351ece29 100644 --- a/README.md +++ b/README.md @@ -132,6 +132,7 @@ imagor supports the following filters: - `sharpen(sigma)` sharpens the image - `strip_exif()` removes Exif metadata from the resulting image - `strip_icc()` removes ICC profile information from the resulting image +- `strip_metadata()` removes all metadata from the resulting image - `upscale()` upscale the image if `fit-in` is used - `watermark(image, x, y, alpha [, w_ratio [, h_ratio]])` adds a watermark to the image. It can be positioned inside the image with the alpha channel specified and optionally resized based on the image size by specifying the ratio - `image` watermark image URI, using the same image loader configured for imagor @@ -811,4 +812,6 @@ Usage of imagor: VIPS enable maximum compression with MozJPEG. Requires mozjpeg to be installed -vips-avif-speed int VIPS avif speed, the lowest is at 0 and the fastest is at 9 (Default 5). + -vips-strip-metadata + VIPS strips all metadata from the resulting image ``` diff --git a/config/vipsconfig/vipsconfig.go b/config/vipsconfig/vipsconfig.go index b3167f22e..377f8d1de 100644 --- a/config/vipsconfig/vipsconfig.go +++ b/config/vipsconfig/vipsconfig.go @@ -36,6 +36,8 @@ func WithVips(fs *flag.FlagSet, cb func() (*zap.Logger, bool)) imagor.Option { "VIPS enable maximum compression with MozJPEG. Requires mozjpeg to be installed") vipsAvifSpeed = fs.Int("vips-avif-speed", 5, "VIPS avif speed, the lowest is at 0 and the fastest is at 9 (Default 5).") + vipsStripMetadata = fs.Bool("vips-strip-metadata", false, + "VIPS strips all metadata from the resulting image") logger, isDebug = cb() ) @@ -54,6 +56,7 @@ func WithVips(fs *flag.FlagSet, cb func() (*zap.Logger, bool)) imagor.Option { vips.WithMaxResolution(*vipsMaxResolution), vips.WithMozJPEG(*vipsMozJPEG), vips.WithAvifSpeed(*vipsAvifSpeed), + vips.WithStripMetadata(*vipsStripMetadata), vips.WithLogger(logger), vips.WithDebug(isDebug), ), diff --git a/testdata/golden/fit-in/67x67/dancing-banana.gif b/testdata/golden/fit-in/67x67/dancing-banana.gif new file mode 100644 index 0000000000000000000000000000000000000000..124c43634d4fa590a1e5d408cde5c0e324482191 GIT binary patch literal 13165 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 literal 0 HcmV?d00001 diff --git a/testdata/golden/fit-in/67x67/demo1.jpg b/testdata/golden/fit-in/67x67/demo1.jpg new file mode 100644 index 0000000000000000000000000000000000000000..d64c4c6a29a6213f37690aa5d7f95dcf897d7cf1 GIT binary patch literal 1768 zcmb7EX*iT?82;87GfCgfXlxDh8HA`A%ZZLICK9rZXh;i1QOa`K7mTtbN<<7g$W|&% zk`|{-D^Xb@6GfCtiE=m*IUm=_>HIv;`|o|P>%Q;je(vX;Xq{*StN{{&l2C+1LP=yY zNsfw9sT2xTQDK%mrlhE>tfa_fs@1?8M>-WRo(wx6So1H93jRU1~mbQ2EsIO;x3>HfB+1FAn+EnMH1w`CRoud72vS-MbHs`j?tM;{>WQo4 z8m$_)%Mur}u+kL^iVI9VW>#9IWZUi%o;*AI!-{rWy^KAhL0t;$jKZR;H8S*?JRQk% z)1b)&NDJ5%+Q&u+4lUHO4l7nrgnb3iI0JeV+5g3 zg9boE{p8c6Nf-^G<2+-|ls3X&OYmC!g}c25r4pWCOXn#42g@;Sts~HMO;|Zk^8v)cJ(J z5R8%`@()-Lq5&|Sjcf7+2*z{s4HYpYM#k&IqH?AGSWU8oVs4wxGr$YtO>e4)Q1`#+ ztUp1ji$e^XMx)Uy^ji6+txHZkM0fD2Q3$fRmTeSDIC*{N|FkG)=+B$C59+3+Z8^>DH!b{&|tUYi}tL|;LaR0elpReTs zcA1}pQ`^6JrT*oacHz7~i|6T@?zO0j!A+44c09B59;^H46z)006SeJDz+N0#`hM;g zt{aw=lCq>ZV?{90tqw*61%_c{dR`z6zUTWUUpYJ^v=FZ)zi()L@;Weja2;)=VdK4z@0uHS z@@3!mmd$JyiA}uC%nt?(_AippUba|2NdK^;VsmV0SeGS*yPl~8=ym|nI){T9*P z)b;`}F>tK=ua{p&o4sqlf9p4EDyobpcMK9Xv5BaG$bUjj127(6;42Lk<>FHYO{N;t zz7v6!1tq?92v4R|zTcrf+}H7Z#z5^G$_Kv%WiGC!I9}76RgC8x$9h!`3J3Yr)Uf*y z{gEZX!J-jg2(dUnVn=)>01e~eA~s(zMKGCWOkY`_Oix|u03PMeefl-vM$Gb(+3V*v#*CQcXe<0@-fAdA>BafY3{3>H?X4_?C zCua#-g1axJW@3@YKBd@a&s!Qt@zfcPe3-A2XTRoYnO~*8O=PunQ$_xg zIzg2zx36ct7}sd`5k_Gs0r zeWe?|eU6CDqfoQ~r?Op70eewdZ7sxuCI8dknO)KYhF>v%eY0FwGLgxUX)! zNISDr+H+Lqn7%GvR`yk)s?Umh$R_S&wL3N6L=5;00H@74qMMl8){M#0k!~*O#lD@ literal 0 HcmV?d00001 diff --git a/testdata/golden/fit-in/67x67/demo3.webp b/testdata/golden/fit-in/67x67/demo3.webp new file mode 100644 index 0000000000000000000000000000000000000000..b37ad27e374259d2af0979d3cd2d030a465dee6c GIT binary patch literal 11230 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�C`-CQD$i`gGb4F`Y#HWc~S79`lbl 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 TAqqK_nK&iC<>%l1HO~J7cJ&r2 literal 0 HcmV?d00001 diff --git a/testdata/golden/fit-in/67x67/filters%3Astrip_metadata%28%29/dancing-banana.gif b/testdata/golden/fit-in/67x67/filters%3Astrip_metadata%28%29/dancing-banana.gif new file mode 100644 index 0000000000000000000000000000000000000000..124c43634d4fa590a1e5d408cde5c0e324482191 GIT binary patch literal 13165 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 literal 0 HcmV?d00001 diff --git a/testdata/golden/fit-in/67x67/filters%3Astrip_metadata%28%29/demo1.jpg b/testdata/golden/fit-in/67x67/filters%3Astrip_metadata%28%29/demo1.jpg new file mode 100644 index 0000000000000000000000000000000000000000..d64c4c6a29a6213f37690aa5d7f95dcf897d7cf1 GIT binary patch literal 1768 zcmb7EX*iT?82;87GfCgfXlxDh8HA`A%ZZLICK9rZXh;i1QOa`K7mTtbN<<7g$W|&% zk`|{-D^Xb@6GfCtiE=m*IUm=_>HIv;`|o|P>%Q;je(vX;Xq{*StN{{&l2C+1LP=yY zNsfw9sT2xTQDK%mrlhE>tfa_fs@1?8M>-WRo(wx6So1H93jRU1~mbQ2EsIO;x3>HfB+1FAn+EnMH1w`CRoud72vS-MbHs`j?tM;{>WQo4 z8m$_)%Mur}u+kL^iVI9VW>#9IWZUi%o;*AI!-{rWy^KAhL0t;$jKZR;H8S*?JRQk% z)1b)&NDJ5%+Q&u+4lUHO4l7nrgnb3iI0JeV+5g3 zg9boE{p8c6Nf-^G<2+-|ls3X&OYmC!g}c25r4pWCOXn#42g@;Sts~HMO;|Zk^8v)cJ(J z5R8%`@()-Lq5&|Sjcf7+2*z{s4HYpYM#k&IqH?AGSWU8oVs4wxGr$YtO>e4)Q1`#+ ztUp1ji$e^XMx)Uy^ji6+txHZkM0fD2Q3$fRmTeSDIC*{N|FkG)=+B$C59+3+Z8^>DH!b{&|tUYi}tL|;LaR0elpReTs zcA1}pQ`^6JrT*oacHz7~i|6T@?zO0j!A+44c09B59;^H46z)006SeJDz+N0#`hM;g zt{aw=lCq>ZV?{90tqw*61%_c{dR`z6zUTWUUpYJ^v=FZ)zi()L@;Weja2;)=VdK4z@0uHS z@@3!mmd$JyiA}uC%nt?(_AippUba|2NdK^;VsmV0SeGS*yPl~8=ym|nI){T9*P z)b;`}F>tK=ua{p&o4sqlf9p4EDyobpcMK9Xv5BaG$bUjj127(6;42Lk<>FHYO{N;t zz7v6!1tq?92v4R|zTcrf+}H7Z#z5^G$_Kv%WiGC!I9}76RgC8x$9h!`3J3Yr)Uf*y z{gEZX!J-jg2(dUnVn=)>01e~eA~s(zMKGCWOkY`_Oix|u03PMeefl-vM$Gb(+3V*v#*CQcXe<0@-fAdA>BafY3{3>H?X4_?C zCua#-g1axJW@3@YKBd@a&s!Qt@zfcPe3-A2XTRoYnO~*8O=PunQ$_xg zIzg2zx36ct7}sd`5k_Gs0r zeWe?|eU6CDqfoQ~r?Op70eewdZ7sxuCI8dknO)KYhF>v%eY0FwGLgxUX)! zNISDr+H+Lqn7%GvR`yk)s?Umh$R_S&wL3N6L=5;00H@74qMMl8){M#0k!~*O#lD@ literal 0 HcmV?d00001 diff --git a/testdata/golden/fit-in/67x67/filters%3Astrip_metadata%28%29/demo3.webp b/testdata/golden/fit-in/67x67/filters%3Astrip_metadata%28%29/demo3.webp new file mode 100644 index 0000000000000000000000000000000000000000..b37ad27e374259d2af0979d3cd2d030a465dee6c GIT binary patch literal 11230 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�C`-CQD$i`gGb4F`Y#HWc~S79`lbl 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 TAqqK_nK&iC<>%l1HO~J7cJ&r2 literal 0 HcmV?d00001 diff --git a/testdata/golden/fit-in/67x67/filters%3Astrip_metadata%28%29/gopher.tiff b/testdata/golden/fit-in/67x67/filters%3Astrip_metadata%28%29/gopher.tiff new file mode 100644 index 0000000000000000000000000000000000000000..c4c95a12ca9d0ee597fc38f3b60c4a5974f0e2e3 GIT binary patch literal 5624 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 0 { opts.Compression = compression } + if stripMetadata { + opts.StripMetadata = true + } return image.ExportPng(opts) case ImageTypeWEBP: opts := NewWebpExportParams() if quality > 0 { opts.Quality = quality } - if stripExif { + if stripMetadata { opts.StripMetadata = true } return image.ExportWebp(opts) @@ -607,19 +613,25 @@ func (v *Processor) export( if quality > 0 { opts.Quality = quality } + if stripMetadata { + opts.StripMetadata = true + } return image.ExportTiff(opts) case ImageTypeGIF: opts := NewGifExportParams() if quality > 0 { opts.Quality = quality } + if stripMetadata { + opts.StripMetadata = true + } return image.ExportGIF(opts) case ImageTypeAVIF: opts := NewAvifExportParams() if quality > 0 { opts.Quality = quality } - if stripExif { + if stripMetadata { opts.StripMetadata = true } opts.Speed = v.AvifSpeed @@ -650,6 +662,9 @@ func (v *Processor) export( if quality > 0 { opts.Quality = quality } + if stripMetadata { + opts.StripMetadata = true + } return image.ExportJpeg(opts) } } diff --git a/vips/processor.go b/vips/processor.go index a62c66a4f..3456173ff 100644 --- a/vips/processor.go +++ b/vips/processor.go @@ -36,6 +36,7 @@ type Processor struct { MaxResolution int MaxAnimationFrames int MozJPEG bool + StripMetadata bool AvifSpeed int Debug bool @@ -305,7 +306,7 @@ func (v *Processor) FocalThumbnail(img *Image, w, h int, fx, fy float64) (err er imageHeight = float64(img.PageHeight()) } - if float64(w)/float64(h) > float64(imageWidth)/float64(imageHeight) { + if float64(w)/float64(h) > float64(imageWidth)/float64(imageHeight) { if err = img.Thumbnail(w, v.MaxHeight, InterestingNone); err != nil { return } diff --git a/vips/processor_test.go b/vips/processor_test.go index d9d19f1c9..0be7f60a6 100644 --- a/vips/processor_test.go +++ b/vips/processor_test.go @@ -75,6 +75,28 @@ func TestProcessor(t *testing.T) { {name: "meta strip exif", path: "meta/filters:strip_exif()/Canon_40D.jpg"}, }, WithDebug(true), WithLogger(zap.NewExample())) }) + t.Run("vips strip metadata config", func(t *testing.T) { + var resultDir = filepath.Join(testDataDir, "golden") + doGoldenTests(t, resultDir, []test{ + {name: "png", path: "fit-in/67x67/gopher-front.png"}, + {name: "jpeg", path: "fit-in/67x67/demo1.jpg"}, + {name: "webp", path: "fit-in/67x67/demo3.webp", arm64Golden: true}, + {name: "tiff", path: "fit-in/67x67/gopher.tiff"}, + {name: "tiff", path: "fit-in/67x67/dancing-banana.gif"}, + //{name: "avif", path: "fit-in/67x67/gopher-front.avif", checkTypeOnly: true}, + }, WithDebug(true), WithStripMetadata(true), WithLogger(zap.NewExample())) + }) + t.Run("vips strip_metadata filter", func(t *testing.T) { + var resultDir = filepath.Join(testDataDir, "golden") + doGoldenTests(t, resultDir, []test{ + {name: "png", path: "gopher-front.png"}, + {name: "jpeg", path: "fit-in/67x67/filters:strip_metadata()/demo1.jpg"}, + {name: "webp", path: "fit-in/67x67/filters:strip_metadata()/demo3.webp", arm64Golden: true}, + {name: "tiff", path: "fit-in/67x67/filters:strip_metadata()/gopher.tiff"}, + {name: "gif", path: "fit-in/67x67/filters:strip_metadata()/dancing-banana.gif"}, + //{name: "avif", path: "fit-in/67x67/filters:strip_metadata()/gopher-front.avif", checkTypeOnly: true}, + }, WithDebug(true), WithLogger(zap.NewExample())) + }) t.Run("vips operations", func(t *testing.T) { var resultDir = filepath.Join(testDataDir, "golden") doGoldenTests(t, resultDir, []test{