From c8c83dd9b98d66a3ca4fca6c62e0a689a4119a1e Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 10 Feb 2025 15:02:04 +0000 Subject: [PATCH] Bump github.com/davidbyttow/govips/v2 from 2.15.0 to 2.16.0 Bumps [github.com/davidbyttow/govips/v2](https://github.com/davidbyttow/govips) from 2.15.0 to 2.16.0. - [Release notes](https://github.com/davidbyttow/govips/releases) - [Commits](https://github.com/davidbyttow/govips/compare/v2.15.0...v2.16.0) --- updated-dependencies: - dependency-name: github.com/davidbyttow/govips/v2 dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- go.mod | 2 +- go.sum | 25 ++++- .../davidbyttow/govips/v2/vips/foreign.c | 2 +- .../davidbyttow/govips/v2/vips/foreign.go | 36 ++++--- .../davidbyttow/govips/v2/vips/foreign.h | 2 +- .../davidbyttow/govips/v2/vips/govips.go | 6 +- .../govips/v2/vips/icc_profiles.go | 93 ++++++++++++++----- .../davidbyttow/govips/v2/vips/image.go | 22 +++++ vendor/modules.txt | 2 +- 9 files changed, 145 insertions(+), 45 deletions(-) diff --git a/go.mod b/go.mod index b30ea72c4..24454bcd8 100644 --- a/go.mod +++ b/go.mod @@ -17,7 +17,7 @@ require ( github.com/cenkalti/backoff v2.2.1+incompatible github.com/coreos/go-oidc/v3 v3.12.0 github.com/cs3org/go-cs3apis v0.0.0-20241105092511-3ad35d174fc1 - github.com/davidbyttow/govips/v2 v2.15.0 + github.com/davidbyttow/govips/v2 v2.16.0 github.com/dhowden/tag v0.0.0-20240417053706-3d75831295e8 github.com/dutchcoders/go-clamd v0.0.0-20170520113014-b970184f4d9e github.com/egirna/icap-client v0.1.1 diff --git a/go.sum b/go.sum index 937b7794b..9c72aa4fb 100644 --- a/go.sum +++ b/go.sum @@ -256,8 +256,8 @@ github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSs github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc h1:U9qPSI2PIWSS1VwoXQT9A3Wy9MM3WgvqSxFWenqJduM= github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= -github.com/davidbyttow/govips/v2 v2.15.0 h1:h3lF+rQElBzGXbQSSPqmE3XGySPhcQo2x3t5l/dZ+pU= -github.com/davidbyttow/govips/v2 v2.15.0/go.mod h1:3OQCHj0nf5Mnrplh5VlNvmx3IhJXyxbAoTJZPflUjmM= +github.com/davidbyttow/govips/v2 v2.16.0 h1:1nH/Rbx8qZP1hd+oYL9fYQjAnm1+KorX9s07ZGseQmo= +github.com/davidbyttow/govips/v2 v2.16.0/go.mod h1:clH5/IDVmG5eVyc23qYpyi7kmOT0B/1QNTKtci4RkyM= github.com/deckarep/golang-set v1.8.0 h1:sk9/l/KqpunDwP7pSjUg0keiOOLEnOBHzykLrsPppp4= github.com/deckarep/golang-set v1.8.0/go.mod h1:5nI87KwE7wgsBU1F4GKAw2Qod7p5kyS383rP6+o6qqo= github.com/deepmap/oapi-codegen v1.3.11/go.mod h1:suMvK7+rKlx3+tpa8ByptmvoXbAV70wERKTOGH3hLp0= @@ -1217,9 +1217,11 @@ golang.org/x/crypto v0.0.0-20220622213112-05595931fe9d/go.mod h1:IxCIyHEi3zRg3s0 golang.org/x/crypto v0.3.1-0.20221117191849-2c476679df9a/go.mod h1:hebNnKkNXi2UzZN1eVRvBB7co0a+JxK6XbPiWVs/3J4= golang.org/x/crypto v0.6.0/go.mod h1:OFC/31mSvZgRz0V1QTNCzfAI1aIRzbiufJtkMIlEp58= golang.org/x/crypto v0.7.0/go.mod h1:pYwdfH91IfpZVANVyUOhSIPZaFoJGxTFbZhFTx+dXZU= +golang.org/x/crypto v0.13.0/go.mod h1:y6Z2r+Rw4iayiXXAIxJIDAJ1zMW4yaTpebo8fPOliYc= golang.org/x/crypto v0.14.0/go.mod h1:MVFd36DqK4CsrnJYDkBA3VC4m2GkXAM0PvzMCn4JQf4= golang.org/x/crypto v0.19.0/go.mod h1:Iy9bg/ha4yyC70EfRS8jz+B6ybOBKMaSxLj6P6oBDfU= golang.org/x/crypto v0.21.0/go.mod h1:0BP7YvVV9gBbVKyeTG0Gyn+gZm94bibOW5BjDEYAOMs= +golang.org/x/crypto v0.23.0/go.mod h1:CKFgDieR+mRhux2Lsu27y0fO304Db0wZe70UKqHu0v8= golang.org/x/crypto v0.32.0 h1:euUpcYgM8WcP71gNpTqQCn6rC2t6ULUPiOzfWaXVVfc= golang.org/x/crypto v0.32.0/go.mod h1:ZnnJkOaASj8g0AjIduWNlq2NRxL0PlBrbKVyZ6V/Ugc= golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= @@ -1236,7 +1238,7 @@ golang.org/x/exp v0.0.0-20241009180824-f66d83c29e7c h1:7dEasQXItcW1xKJ2+gg5VOiBn golang.org/x/exp v0.0.0-20241009180824-f66d83c29e7c/go.mod h1:NQtJDoLvd6faHhE7m4T/1IY708gDefGGjR/iUW8yQQ8= golang.org/x/image v0.0.0-20190227222117-0694c2d4d067/go.mod h1:kZ7UVZpmo3dzQBMxlp+ypCbDeSB+sBbTgSJuh5dn5js= golang.org/x/image v0.0.0-20190802002840-cff245a6509b/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0= -golang.org/x/image v0.10.0/go.mod h1:jtrku+n79PfroUbvDdeUWMAI+heR786BofxrbiSF+J0= +golang.org/x/image v0.18.0/go.mod h1:4yyo5vMFQjVjUcVk4jEQcU9MGy/rulF5WvUILseCM2E= golang.org/x/image v0.24.0 h1:AN7zRgVsbvmTfNyqIbbOraYL8mSwcKncEj8ofjgzcMQ= golang.org/x/image v0.24.0/go.mod h1:4b/ITuLfqYq1hqZcjofwctIhi7sZh2WaCjvsBNjjya8= golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= @@ -1260,6 +1262,9 @@ golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4= golang.org/x/mod v0.8.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= +golang.org/x/mod v0.12.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= +golang.org/x/mod v0.15.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c= +golang.org/x/mod v0.17.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c= golang.org/x/mod v0.22.0 h1:D4nJWe9zXqHOmWqj4VMOJhvzj7bEZg4wEYa759z1pH4= golang.org/x/mod v0.22.0/go.mod h1:6SkKJ3Xj0I0BrPOZoBy3bdMptDDU9oJrpohJ3eWZ1fY= golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= @@ -1314,10 +1319,12 @@ golang.org/x/net v0.6.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs= golang.org/x/net v0.7.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs= golang.org/x/net v0.8.0/go.mod h1:QVkue5JL9kW//ek3r6jTKnTFis1tRmNAW2P1shuFdJc= golang.org/x/net v0.10.0/go.mod h1:0qNGK6F8kojg2nk9dLZ2mShWaEBan6FAoqfSigmmuDg= +golang.org/x/net v0.15.0/go.mod h1:idbUs1IY1+zTqbi8yxTbhexhEEk5ur9LInksu6HrEpk= golang.org/x/net v0.17.0/go.mod h1:NxSsAGuq816PNPmqtQdLE42eU2Fs7NoRIZrHJAlaCOE= golang.org/x/net v0.21.0/go.mod h1:bIjVDfnllIU7BJ2DNgfnXvpSvtn8VRwhlsaeUTyUS44= golang.org/x/net v0.22.0/go.mod h1:JKghWKKOSdJwpW2GEx0Ja7fmaKnMsbu+MWVZTokSYmg= golang.org/x/net v0.23.0/go.mod h1:JKghWKKOSdJwpW2GEx0Ja7fmaKnMsbu+MWVZTokSYmg= +golang.org/x/net v0.25.0/go.mod h1:JkAGAh7GEvH74S6FOH42FLoXpXbE/aqXSrIQjXgsiwM= golang.org/x/net v0.34.0 h1:Mb7Mrk043xzHgnRM88suvJFwzVrRfHEHJEl5/71CKw0= golang.org/x/net v0.34.0/go.mod h1:di0qlW3YNM5oh6GqDGQr92MyTozJPmybPK4Ev/Gm31k= golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= @@ -1343,6 +1350,9 @@ golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJ golang.org/x/sync v0.0.0-20220601150217-0de741cfad7f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.1.0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.3.0/go.mod h1:FU7BRWz2tNW+3quACPkgCx/L+uEAv1htQ0V83Z9Rj+Y= +golang.org/x/sync v0.6.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= +golang.org/x/sync v0.7.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= golang.org/x/sync v0.11.0 h1:GGz8+XQP4FvTTrjZPzNKTMFtSXH80RAzG+5ghFPgK9w= golang.org/x/sync v0.11.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= golang.org/x/sys v0.0.0-20180622082034-63fc586f45fe/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= @@ -1425,9 +1435,11 @@ golang.org/x/sys v0.12.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.13.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.17.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/sys v0.18.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= +golang.org/x/sys v0.20.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/sys v0.21.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/sys v0.29.0 h1:TPYlXGxvx1MGTn2GiZDhnjPA9wZzZeGKHHmKhHYvgaU= golang.org/x/sys v0.29.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= +golang.org/x/telemetry v0.0.0-20240228155512-f48c80bd79b2/go.mod h1:TeRTkGYfJXctD9OcfyVLyj2J3IxLnKwHJR8f4D8a3YE= golang.org/x/term v0.0.0-20201117132131-f5c789dd3221/go.mod h1:Nr5EML6q2oocZ2LXRh80K7BxOlk5/8JxuGnuhpl+muw= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= @@ -1435,9 +1447,11 @@ golang.org/x/term v0.2.0/go.mod h1:TVmDHMZPmdnySmBfhjOoOdhjzdE1h4u1VwSiw2l1Nuc= golang.org/x/term v0.5.0/go.mod h1:jMB1sMXY+tzblOD4FWmEbocvup2/aLOaQEp7JmGp78k= golang.org/x/term v0.6.0/go.mod h1:m6U89DPEgQRMq3DNkDClhWw02AUbt2daBVO4cn4Hv9U= golang.org/x/term v0.8.0/go.mod h1:xPskH00ivmX89bAKVGSKKtLOWNx2+17Eiy94tnKShWo= +golang.org/x/term v0.12.0/go.mod h1:owVbMEjm3cBLCHdkQu9b1opXd4ETQWc3BhuQGKgXgvU= golang.org/x/term v0.13.0/go.mod h1:LTmsnFJwVN6bCy1rVCoS+qHT1HhALEFxKncY3WNNh4U= golang.org/x/term v0.17.0/go.mod h1:lLRBjIVuehSbZlaOtGMbcMncT+aqLLLmKrsjNrUguwk= golang.org/x/term v0.18.0/go.mod h1:ILwASektA3OnRv7amZ1xhE/KTR+u50pbXfZ03+6Nx58= +golang.org/x/term v0.20.0/go.mod h1:8UkIAJTvZgivsXaD6/pH6U9ecQzZ45awqEOzuCvwpFY= golang.org/x/term v0.28.0 h1:/Ts8HFuMR2E6IP/jlo7QVLZHggjKQbhu/7H0LJFr3Gg= golang.org/x/term v0.28.0/go.mod h1:Sw/lC2IAUZ92udQNf3WodGtn4k/XoLyZoh8v/8uiwek= golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= @@ -1453,9 +1467,10 @@ golang.org/x/text v0.4.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= golang.org/x/text v0.7.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= golang.org/x/text v0.8.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8= golang.org/x/text v0.9.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8= -golang.org/x/text v0.11.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE= golang.org/x/text v0.13.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE= golang.org/x/text v0.14.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU= +golang.org/x/text v0.15.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU= +golang.org/x/text v0.16.0/go.mod h1:GhwF1Be+LQoKShO3cGOHzqOgRrGaYc9AvblQOmPVHnI= golang.org/x/text v0.22.0 h1:bofq7m3/HAFvbF51jz3Q9wLg3jkvSPuiZu/pD1XwgtM= golang.org/x/text v0.22.0/go.mod h1:YRoo4H8PVmsu+E3Ou7cqLVH8oXWIHVoX0jqUWALQhfY= golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= @@ -1518,6 +1533,8 @@ golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4f golang.org/x/tools v0.0.0-20210112230658-8b4aab62c064/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc= golang.org/x/tools v0.6.0/go.mod h1:Xwgl3UAJ/d3gWutnCtw505GrjyAbvKui8lOU390QaIU= +golang.org/x/tools v0.13.0/go.mod h1:HvlwmtVNQAhOuCjW7xxvovg8wbNq7LwfXh/k7wXUl58= +golang.org/x/tools v0.21.1-0.20240508182429-e35e4ccd0d2d/go.mod h1:aiJjzUbINMkxbQROHiO6hDPo2LHcIPhhQsa9DLh0yGk= golang.org/x/tools v0.28.0 h1:WuB6qZ4RPCQo5aP3WdKZS7i595EdWqWR8vqJTlwTVK8= golang.org/x/tools v0.28.0/go.mod h1:dcIOrVd3mfQKTgrDVQHqCPMWy6lnhfhtX3hLXYVLfRw= golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= diff --git a/vendor/github.com/davidbyttow/govips/v2/vips/foreign.c b/vendor/github.com/davidbyttow/govips/v2/vips/foreign.c index 23f9d27d5..10b6b883a 100644 --- a/vendor/github.com/davidbyttow/govips/v2/vips/foreign.c +++ b/vendor/github.com/davidbyttow/govips/v2/vips/foreign.c @@ -526,7 +526,7 @@ static SaveParams defaultSaveParams = { .stripMetadata = FALSE, .jpegOptimizeCoding = FALSE, - .jpegSubsample = VIPS_FOREIGN_JPEG_SUBSAMPLE_ON, + .jpegSubsample = VIPS_FOREIGN_SUBSAMPLE_ON, .jpegTrellisQuant = FALSE, .jpegOvershootDeringing = FALSE, .jpegOptimizeScans = FALSE, diff --git a/vendor/github.com/davidbyttow/govips/v2/vips/foreign.go b/vendor/github.com/davidbyttow/govips/v2/vips/foreign.go index 695617f53..cfa4dddde 100644 --- a/vendor/github.com/davidbyttow/govips/v2/vips/foreign.go +++ b/vendor/github.com/davidbyttow/govips/v2/vips/foreign.go @@ -6,13 +6,12 @@ import ( "bytes" "encoding/xml" "fmt" + "golang.org/x/image/bmp" + "golang.org/x/net/html/charset" "image/png" "math" "runtime" "unsafe" - - "golang.org/x/image/bmp" - "golang.org/x/net/html/charset" ) // SubsampleMode correlates to a libvips subsample mode @@ -20,10 +19,10 @@ type SubsampleMode int // SubsampleMode enum correlating to libvips subsample modes const ( - VipsForeignSubsampleAuto SubsampleMode = C.VIPS_FOREIGN_JPEG_SUBSAMPLE_AUTO - VipsForeignSubsampleOn SubsampleMode = C.VIPS_FOREIGN_JPEG_SUBSAMPLE_ON - VipsForeignSubsampleOff SubsampleMode = C.VIPS_FOREIGN_JPEG_SUBSAMPLE_OFF - VipsForeignSubsampleLast SubsampleMode = C.VIPS_FOREIGN_JPEG_SUBSAMPLE_LAST + VipsForeignSubsampleAuto SubsampleMode = C.VIPS_FOREIGN_SUBSAMPLE_AUTO + VipsForeignSubsampleOn SubsampleMode = C.VIPS_FOREIGN_SUBSAMPLE_ON + VipsForeignSubsampleOff SubsampleMode = C.VIPS_FOREIGN_SUBSAMPLE_OFF + VipsForeignSubsampleLast SubsampleMode = C.VIPS_FOREIGN_SUBSAMPLE_LAST ) // ImageType represents an image type @@ -154,14 +153,14 @@ func DetermineImageType(buf []byte) ImageType { return ImageTypeHEIF } else if isSVG(buf) { return ImageTypeSVG - } else if isPDF(buf) { - return ImageTypePDF } else if isBMP(buf) { return ImageTypeBMP } else if isJP2K(buf) { return ImageTypeJP2K } else if isJXL(buf) { return ImageTypeJXL + } else if isPDF(buf) { + return ImageTypePDF } else { return ImageTypeUnknown } @@ -240,7 +239,10 @@ func isSVG(buf []byte) bool { var pdf = []byte("\x25\x50\x44\x46") func isPDF(buf []byte) bool { - return bytes.HasPrefix(buf, pdf) + if len(buf) <= 1024 { + return bytes.Contains(buf, pdf) + } + return bytes.Contains(buf[:1024], pdf) } var bmpHeader = []byte("BM") @@ -257,10 +259,14 @@ func isJP2K(buf []byte) bool { return bytes.HasPrefix(buf, jp2kHeader) } +// As a 'naked' codestream var jxlHeader = []byte("\xff\x0a") +// As an ISOBMFF-based container: 0x0000000C 4A584C20 0D0A870A +var jxlHeaderISOBMFF = []byte("\x00\x00\x00\x0C\x4A\x58\x4C\x20\x0D\x0A\x87\x0A") + func isJXL(buf []byte) bool { - return bytes.HasPrefix(buf, jxlHeader) + return bytes.HasPrefix(buf, jxlHeader) || bytes.HasPrefix(buf, jxlHeaderISOBMFF) } func vipsLoadFromBuffer(buf []byte, params *ImportParams) (*C.VipsImage, ImageType, ImageType, error) { @@ -352,7 +358,7 @@ func vipsSaveJPEGToBuffer(in *C.VipsImage, params JpegExportParams) ([]byte, err p.quality = C.int(params.Quality) p.interlace = C.int(boolToInt(params.Interlace)) p.jpegOptimizeCoding = C.int(boolToInt(params.OptimizeCoding)) - p.jpegSubsample = C.VipsForeignJpegSubsample(params.SubsampleMode) + p.jpegSubsample = C.VipsForeignSubsample(params.SubsampleMode) p.jpegTrellisQuant = C.int(boolToInt(params.TrellisQuant)) p.jpegOvershootDeringing = C.int(boolToInt(params.OvershootDeringing)) p.jpegOptimizeScans = C.int(boolToInt(params.OptimizeScans)) @@ -408,6 +414,10 @@ func vipsSaveTIFFToBuffer(in *C.VipsImage, params TiffExportParams) ([]byte, err p.stripMetadata = C.int(boolToInt(params.StripMetadata)) p.quality = C.int(params.Quality) p.tiffCompression = C.VipsForeignTiffCompression(params.Compression) + p.tiffPyramid = C.int(boolToInt(params.Pyramid)) + p.tiffTile = C.int(boolToInt(params.Tile)) + p.tiffTileHeight = C.int(params.TileHeight) + p.tiffTileWidth = C.int(params.TileWidth) return vipsSaveToBuffer(p) } @@ -457,7 +467,7 @@ func vipsSaveJP2KToBuffer(in *C.VipsImage, params Jp2kExportParams) ([]byte, err p.jp2kLossless = C.int(boolToInt(params.Lossless)) p.jp2kTileWidth = C.int(params.TileWidth) p.jp2kTileHeight = C.int(params.TileHeight) - p.jpegSubsample = C.VipsForeignJpegSubsample(params.SubsampleMode) + p.jpegSubsample = C.VipsForeignSubsample(params.SubsampleMode) return vipsSaveToBuffer(p) } diff --git a/vendor/github.com/davidbyttow/govips/v2/vips/foreign.h b/vendor/github.com/davidbyttow/govips/v2/vips/foreign.h index 836f1df06..e54b946ce 100644 --- a/vendor/github.com/davidbyttow/govips/v2/vips/foreign.h +++ b/vendor/github.com/davidbyttow/govips/v2/vips/foreign.h @@ -84,7 +84,7 @@ typedef struct SaveParams { // JPEG BOOL jpegOptimizeCoding; - VipsForeignJpegSubsample jpegSubsample; + VipsForeignSubsample jpegSubsample; BOOL jpegTrellisQuant; BOOL jpegOvershootDeringing; BOOL jpegOptimizeScans; diff --git a/vendor/github.com/davidbyttow/govips/v2/vips/govips.go b/vendor/github.com/davidbyttow/govips/v2/vips/govips.go index 6969b62ab..2036ebbe0 100644 --- a/vendor/github.com/davidbyttow/govips/v2/vips/govips.go +++ b/vendor/github.com/davidbyttow/govips/v2/vips/govips.go @@ -96,8 +96,6 @@ func Startup(config *Config) { panic(fmt.Sprintf("Failed to start vips code=%v", err)) } - initializeICCProfiles() - running = true if config != nil { @@ -185,7 +183,9 @@ func Shutdown() { return } - os.RemoveAll(temporaryDirectory) + if temporaryDirectory != "" { + os.RemoveAll(temporaryDirectory) + } C.vips_shutdown() disableLogging() diff --git a/vendor/github.com/davidbyttow/govips/v2/vips/icc_profiles.go b/vendor/github.com/davidbyttow/govips/v2/vips/icc_profiles.go index f10c42923..94f467bb4 100644 --- a/vendor/github.com/davidbyttow/govips/v2/vips/icc_profiles.go +++ b/vendor/github.com/davidbyttow/govips/v2/vips/icc_profiles.go @@ -1,9 +1,9 @@ package vips import ( - "fmt" "os" "path/filepath" + "sync" ) var ( @@ -644,32 +644,83 @@ var ( 0x00, 0x20, 0x63, 0xcf, 0x8f, 0xf0, 0x65, 0x87, 0x4e, 0xf6, 0x00, 0x00, } - temporaryDirectory = temporaryDirectoryOrPanic() - SRGBV2MicroICCProfilePath = filepath.Join(temporaryDirectory, "srgb_v2_micro.icc") - SGrayV2MicroICCProfilePath = filepath.Join(temporaryDirectory, "sgray_v2_micro.icc") - SRGBIEC6196621ICCProfilePath = filepath.Join(temporaryDirectory, "srgb_iec61966_2_1.icc") - GenericGrayGamma22ICCProfilePath = filepath.Join(temporaryDirectory, "generic_gray_gamma_2_2.icc") + sRGBV2MicroICCProfilePathToken = "\x00srgb_v2_micro.icc" + sGrayV2MicroICCProfilePathToken = "\x00sgray_v2_micro.icc" + sRGBIEC6196621ICCProfilePathToken = "\x00srgb_iec61966_2_1.icc" + genericGrayGamma22ICCProfilePathToken = "\x00generic_gray_gamma_2_2.icc" + + temporaryDirectory = "" + SRGBV2MicroICCProfilePath = sRGBV2MicroICCProfilePathToken + SGrayV2MicroICCProfilePath = sGrayV2MicroICCProfilePathToken + SRGBIEC6196621ICCProfilePath = sRGBIEC6196621ICCProfilePathToken + GenericGrayGamma22ICCProfilePath = genericGrayGamma22ICCProfilePathToken ) -func initializeICCProfiles() { - storeIccProfile(SRGBV2MicroICCProfilePath, sRGBV2MicroICCProfile) - storeIccProfile(SGrayV2MicroICCProfilePath, sGrayV2MicroICCProfile) - storeIccProfile(SRGBIEC6196621ICCProfilePath, sRGBIEC6196621ICCProfile) - storeIccProfile(GenericGrayGamma22ICCProfilePath, genericGrayGamma22ICCProfile) -} - -func storeIccProfile(path string, data []byte) { - err := os.WriteFile(path, data, 0600) - if err != nil { - panic(fmt.Sprintf("Couldn't store temporary file for ICC profile in '%v': %v", path, err.Error())) +// Back support +func ensureLoadICCPath(name *string) (err error) { + if len(*name) > 0 && (*name)[0] == 0 { + switch *name { + case sRGBV2MicroICCProfilePathToken: + *name, err = GetSRGBV2MicroICCProfilePath() + return + case sGrayV2MicroICCProfilePathToken: + *name, err = GetSGrayV2MicroICCProfilePath() + return + case sRGBIEC6196621ICCProfilePathToken: + *name, err = GetSRGBIEC6196621ICCProfilePath() + return + case genericGrayGamma22ICCProfilePathToken: + *name, err = GetGenericGrayGamma22ICCProfilePath() + return + } } + return } -func temporaryDirectoryOrPanic() string { - temporaryDirectory, err := os.MkdirTemp("", "govips-") +func getTemporaryDirectory() (string, error) { + if temporaryDirectory != "" { + return temporaryDirectory, nil + } + var err error + temporaryDirectory, err = os.MkdirTemp("", "govips-") if err != nil { - panic(fmt.Sprintf("Couldn't create temporary directory: %v", err.Error())) + return "", err + } + return temporaryDirectory, nil +} + +var lockIcc sync.Mutex + +func GetSRGBV2MicroICCProfilePath() (string, error) { + return getOrLoad(&SRGBV2MicroICCProfilePath, "srgb_v2_micro.icc", sRGBV2MicroICCProfile) +} + +func GetSGrayV2MicroICCProfilePath() (string, error) { + return getOrLoad(&SGrayV2MicroICCProfilePath, "sgray_v2_micro.icc", sGrayV2MicroICCProfile) +} + +func GetSRGBIEC6196621ICCProfilePath() (string, error) { + return getOrLoad(&SRGBIEC6196621ICCProfilePath, "srgb_iec61966_2_1.icc", sRGBIEC6196621ICCProfile) +} + +func GetGenericGrayGamma22ICCProfilePath() (string, error) { + return getOrLoad(&GenericGrayGamma22ICCProfilePath, "generic_gray_gamma_2_2.icc", genericGrayGamma22ICCProfile) +} + +func getOrLoad(pathFile *string, name string, fileBytes []byte) (string, error) { + lockIcc.Lock() + defer lockIcc.Unlock() + if len(*pathFile) > 0 && (*pathFile)[0] != 0 { + return *pathFile, nil } - return temporaryDirectory + if _, err := getTemporaryDirectory(); err != nil { + return "", err + } + + *pathFile = filepath.Join(temporaryDirectory, name) + if err := os.WriteFile(*pathFile, fileBytes, 0600); err != nil { + return "", err + } + return *pathFile, nil } diff --git a/vendor/github.com/davidbyttow/govips/v2/vips/image.go b/vendor/github.com/davidbyttow/govips/v2/vips/image.go index 82d5fac26..1eb1d6fdb 100644 --- a/vendor/github.com/davidbyttow/govips/v2/vips/image.go +++ b/vendor/github.com/davidbyttow/govips/v2/vips/image.go @@ -8,6 +8,9 @@ import ( "errors" "fmt" "image" + _ "image/gif" + _ "image/jpeg" + _ "image/png" "io" "os" "runtime" @@ -303,6 +306,10 @@ type TiffExportParams struct { Quality int Compression TiffCompression Predictor TiffPredictor + Pyramid bool + Tile bool + TileHeight int + TileWidth int } // NewTiffExportParams creates default values for an export of a TIFF image. @@ -311,6 +318,10 @@ func NewTiffExportParams() *TiffExportParams { Quality: 80, Compression: TiffCompressionLzw, Predictor: TiffPredictorHorizontal, + Pyramid: false, + Tile: false, + TileHeight: 256, + TileWidth: 256, } } @@ -1391,6 +1402,13 @@ func (r *ImageRef) RemoveICCProfile() error { // TransformICCProfileWithFallback transforms from the embedded ICC profile of the image to the ICC profile at the given path. // The fallback ICC profile is used if the image does not have an embedded ICC profile. func (r *ImageRef) TransformICCProfileWithFallback(targetProfilePath, fallbackProfilePath string) error { + if err := ensureLoadICCPath(&targetProfilePath); err != nil { + return err + } + if err := ensureLoadICCPath(&fallbackProfilePath); err != nil { + return err + } + depth := 16 if r.BandFormat() == BandFormatUchar || r.BandFormat() == BandFormatChar || r.BandFormat() == BandFormatNotSet { depth = 8 @@ -1426,6 +1444,10 @@ func (r *ImageRef) OptimizeICCProfile() error { r.optimizedIccProfile = SGrayV2MicroICCProfilePath } + if err := ensureLoadICCPath(&r.optimizedIccProfile); err != nil { + return err + } + embedded := r.HasICCProfile() && (inputProfile == "") depth := 16 diff --git a/vendor/modules.txt b/vendor/modules.txt index 529f45703..e73eba3f5 100644 --- a/vendor/modules.txt +++ b/vendor/modules.txt @@ -356,7 +356,7 @@ github.com/cyphar/filepath-securejoin # github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc ## explicit github.com/davecgh/go-spew/spew -# github.com/davidbyttow/govips/v2 v2.15.0 +# github.com/davidbyttow/govips/v2 v2.16.0 ## explicit; go 1.15 github.com/davidbyttow/govips/v2/vips # github.com/deckarep/golang-set v1.8.0