From ab4ef56bab7ca2f283b61a69f5bdf6784f1baadf Mon Sep 17 00:00:00 2001 From: Tomas Aparicio Date: Sun, 10 Sep 2017 17:16:31 +0200 Subject: [PATCH] feat(#189): allow strip image metadata via bimg.Options.StripMetadata = bool --- fixtures/exif/Landscape_1_out.jpg | Bin 202379 -> 203117 bytes fixtures/exif/Landscape_2_out.jpg | Bin 203480 -> 204218 bytes fixtures/exif/Landscape_3_out.jpg | Bin 203782 -> 204520 bytes fixtures/exif/Landscape_4_out.jpg | Bin 203125 -> 203863 bytes fixtures/exif/Landscape_5_out.jpg | Bin 209018 -> 209756 bytes fixtures/exif/Landscape_6_out.jpg | Bin 209290 -> 210028 bytes fixtures/exif/Landscape_7_out.jpg | Bin 208267 -> 209005 bytes fixtures/exif/Landscape_8_out.jpg | Bin 209443 -> 210181 bytes fixtures/exif/Portrait_1_out.jpg | Bin 167935 -> 168673 bytes fixtures/exif/Portrait_2_out.jpg | Bin 169146 -> 169884 bytes fixtures/exif/Portrait_3_out.jpg | Bin 169418 -> 170156 bytes fixtures/exif/Portrait_4_out.jpg | Bin 168597 -> 169335 bytes fixtures/exif/Portrait_5_out.jpg | Bin 177459 -> 178197 bytes fixtures/exif/Portrait_6_out.jpg | Bin 177929 -> 178667 bytes fixtures/exif/Portrait_7_out.jpg | Bin 176730 -> 177468 bytes fixtures/exif/Portrait_8_out.jpg | Bin 177976 -> 178714 bytes fixtures/test_gif.jpg | Bin 113599 -> 113747 bytes fixtures/test_pdf.jpg | Bin 65344 -> 65492 bytes fixtures/test_svg.jpg | Bin 119205 -> 119353 bytes options.go | 1 + resizer.go | 1 + resize_test.go => resizer_test.go | 0 vips.go | 8 +++++--- vips.h | 8 ++++---- vips_test.go | 2 +- 25 files changed, 12 insertions(+), 8 deletions(-) rename resize_test.go => resizer_test.go (100%) diff --git a/fixtures/exif/Landscape_1_out.jpg b/fixtures/exif/Landscape_1_out.jpg index dce95e3931ae6df993a6ed8ac46268e6a42ce7d3..033589e8b70d10801f06c5f33fe089f82fd81a22 100644 GIT binary patch delta 787 zcmeBP%ky>)AvD8C-UV4c9gzz!5* zF)%VTSO8-i8W=2Kgc$SxKLf)8CYUj74hxuJY?cim1OGo_lJRtQjt>a(ck}dd1^b1G zCnq_#m`Q+vAvdq2D9GJOAtEwLf&C896OuqvH5n`ulk1BM90LM;Kt^B(->!i|gn{9* zF32$KYH*5jrKA=o17-gJaa?jiQ3)^rV}NY#@{$4&JA}(ud0$hy}trCo_5=>hqn2W^# DMSyu% delta 26 gcmaF6iKlxl57Yk}%}(~rZF)1`Z8!SFfed1urUfT zFaueP3`{^mih&i(W?%?ol!mk87&Q=Tn1rEhpn2_?3@lLfKr_L>1In+5FjyxrFt7uK zSPYB|4Hm%Ih6V-;7$L^||Ifg%fC**{o5KQT7@K7S$iV-Pm}ESio#O+7{M|f#T)}=} z;>k(QEoKs6V93oYDGG9TQizC*QeeLW^n@hPR80oU#N_(o0>^*=ACM8)!MAIm5Mf}r ztP3&>yBeILTq&u=$w1jZKpdA`P*eg8yBHvwyS$_T#Li%-XJ8OX$_8_4fD$4_Kqmqv zfWg5ak`7@n0kM-H>>Xe=AwkYSHD`cqhjb)%5)vC~F;EEubFvYL!VZA;lLtytD}X*= zVDOA!U;qUx#1uqmA;g%)fNn5mU|?E;5X)c0z+mweC|*ASA(%9ifnj?q1B1jZgqX?# z1_u5X28M0tlS_-rAeJyl0qN6>Cz+F3CvjwRe-p454U{%f{HQs>NWyxO8*5;B?Az>u zD%Q@8vuf64?ytRk_@%-B|Nn0@I5V)Zu(GkTu(7eSv9q&ra0zfVO0-Hawn{K9;W{{nx8PWKVf17Vy5j+n3%6g0RXPQ3(5ch diff --git a/fixtures/exif/Landscape_3_out.jpg b/fixtures/exif/Landscape_3_out.jpg index 3032ba8d5c94be786eb0b0a82bebc4f07de07ec4..681964a3eef1ae645a1da9d26bdfdd9316339421 100644 GIT binary patch delta 787 zcmZqM!SiA-PyPQJ{~s_2c)5AHF)%VRFfalk!~cg28(b?g(-;_heHpYE7#KJh*cgQv zn1L)t5XmUTzzSwFFoZEm!`X3+8c;P%3=B-dP&UxK_DlvAsCuB8VBi7e*FzYr6BroS zfkG?>Mur9pU~EGJg9Ts<85sZnXJA;s1T%)sVF5FY&9VVx;QvQVGM>)P@c}{pZk|4_ zV81Z&2X5*unUPzeKbvJr^F4uJNP2TD>a zfIeVg@Qh$!00k?=6hvqt#F)i^ZZHO>h$RTI{6!257GHtl^%D?+Ni!K3wzo1cNZdk* zsVrb%;BR4I*mgd-w5SYX34;`nKFxTNIhl15M>h920ejIvX%oedniGs9tS7m#2A0RZ z%`T{7?c6x4W=-b)+RKMu8vOtN|2Bg&0~-q~8!HPN8!H<-I~xa=09T_#s{~`K1k+Xt H=6BKnaP4{J delta 26 gcmaE{m#1w957Yk}%}(~rZF)1`Z8!SFfed1urUfT zFaueP3@kuGih&i(W?%?ol!mk87&V}3m>3wCgrRJpdF`1XT_BSgfM$Y$2ap8u>mdx* z2@DMEKrV}ck)go?7~9amU;!h=!1UoaEeMCIJS9+`N*aAa^H)h{z}f_B%j}C4r`DGFT=i*B2K!1_bzkjKB`Q zT?4z5;j%8sFzjk@igKl-7AFH`{{V4ZazRlE(9?9;M)MB6#2IgcV5QQB8?I#bE zq*efZz`)=c!N33tR){Hx&_akYivitW3``MA5Mud@7#J+R0>$emAOw?UGB9j!WnhrF zg%DF&z`(%Y!oaZYd~#_~8N?C>DIk5C@g#FH>m-hB?r#G2qJh#TiXSy67)e-9a$^lF zkA0h6P{rE0aaPTm%>A{O55F|{|NsAO24@B~7FIS^7B)6kHg(~rZF)1`Z8!SFfed1urUfT zFaueP46Hyx3PgfbGK4Wo!`X3+8c;P%3=B-dP&QCidnN-5R6Wp4Fz|r#>mdx*2@DME zKp_?bBSV7)Ft(wA!2(8zG5`NFFf3q#8N=qVfEmVS*#I)||05lh1Q-}{^Gb?>+?^C6BBK=8?*JVx2{cuc!7?$qzPP|KAixJ?1a|Q48rYu< zmvupgVON7wlq)5*I2kDW2Z-a63yMmBfffT~bC;JCfY=!f^$ZLmN!egd4NyX)2a* z*nvVU21bSk3t((R1A_&O5M%!TXJA;s1T%)sVF5FY&9VVx;QvQVGM>)P@c}{pZk|4_ zV81Z&Sa(!`uV?clp$O!D<+ci*# zFfd%!1sR524Ng(6l+@y6pzI$Yj!P~mDglOF43N!TUQz&JXE4+=Fo+~&gE=)o36Ub8 z6M+)I;9w9*hp?A`*hvuf4zQY#AZMVOGeEXOIubhxi4C-+V$5PdHy8s`#1e#9{vrkji?2ZO`UwcZq?rs1+glkJByJ(Z zR2DEW@V789Y&)M^T2uzHgh2{OpJqJCoXk3jBb)o1fW2s-w29(J%?U;l)|1>=1IuII zW*1bkc5a+ivnF$Y?d8KS4gUZCf1AOXfsKWgjg^Isjg^g^osEM_fU8lWRf4fqf@!M+ HbCDqcn8JDB delta 26 gcmaF!f~V^-57Yk}%}bO z1~af27#SKYfUyk?3>Gj#jQRhcfnfm?%osL@1$>^~D8_0RcWBBd~*S*FYh{ zz;Ia?WEgfeI7PWqQj3#;vVVX$F1etn1Q>QPKsI-INdbtR!BEe@Ad-{~=F|WsM2dh; z1WEvdgFz%6!d?PmCqdXdz-mH*oPlc20ND=dNbDpeHq>IE5(egEBM^lh0PQCal%!Sw zeZaur8Nt8+3RZ|Ih|ofaF^d7+U<^zVOAuoDix?Ozz5>PTCm;lqW->5rZ)ISRxP=f? zS-`-+-@?GK?R;`+Q5nP%1}PwYn(-uaGV3IcZ0>IY_M(B(CW;?5Cm2asPjX`oERTJg zT~Ni^xp7v_n#}#Rmk+-*`2YX^Z3brsHWpSkRu(okRyKBaHV!TUu11Mg3C30lrmYgp G#kv4+wt3J1 delta 26 gcmaF+fT#O557Yk}%}3wCgrRJpdF`1DEKv18Gr_2X5*unUPzeKbvJr^F4uJNP2TD>a zfIeVg@Qh$!00k?=6hvqt#F)i^ZZHO>h$RTI{6!257GHtl^%D?+Ni!K3wzo1cNZdk* zsVrb%;BR4I*mgd-w5SYX34;`nKFxTNIhl15M>h920ejIvX%oedniGs9tS7m#2A0RZ z%`T{7?c6x4W=-b)+RKMu8vOtN|2Bg&0~-q~8!HPN8!H<-I~xa=09T_#s{~`K1k+Xt HW^N+@xHow* delta 26 gcmZpD#k2Sc57Yk}%}ApigX diff --git a/fixtures/exif/Portrait_1_out.jpg b/fixtures/exif/Portrait_1_out.jpg index 593b0b80e07150bac3aa9ec9609dd703b63dd2ba..e3af98cef44cf85bcf0fd8fd68684c7e20c62535 100644 GIT binary patch delta 784 zcmexApX=dLuKNEs{y$(4@N)BXV_;-tU|(~rZF)1`Z8!SFfed1urUfT zFaud&c}6J)Rxq1^A&gNP&W>Z$fU03)U|}qg|a;2meCj({w0C8M$K~V`X0Aqk`?(&iX5IcjRo`FFmDI3hG0ZNDz0i6hx z00swxNIHbQ1jJ5)uy=sfgakPQ)tmvc9nz85Nl0v{#Xuzt%*jR|3OfMWPaY^qtpNIf zfx$C^fdLe(5K|DLg%D#F1G>Q&m?D-S#PSz0Fj#yAiq}s-2qw*BVA$Tuz#wr8A*Ql` zfq}n;fnnSE9S}N#6v zinVj&teQ2M`)e;BerfRk|Nq+z&J1iUtZb|-Y;3G-?CfkDTmoE;60H)9TP2vD_X7aI C0(tEK delta 22 ecmaF3l(~rZF)1`Z8!SFfed1urUfT zFaueP3`{^mih&i(W?%?ol!mk87&Q=Tn1rEhpn2_?3@lLfKr_L>1In+5FjyxrFt7uK zSPYB|4Hm%Ih6V-;7$L^||Ifg%fC**{%Z3HaFgBY5P#?qpM@%xF&d%`xLH=%@KCWQD zF!AIh=N2;wFfioil@tZJJ1Im&Mk%o00eV6bXsRZIWnyxDae-q%fDgzB?BLrqP>3)v zT-F5{hFuL#QLdEK;$)!gA0UoPE+{GihFuJh&0Stn0Agn_)H5)MBxQp+H9!fGBA^q2 z62RbK5J`uymw?zw5cUqRnvfu8pqev4wnI7+I|+#mwHT;`fjQX-L}3R&`^f_(sTDvU zFfe#VFff3E6=Dh^v=Cy`iE~fuCnx8PWKVf3r{)CBX#}oj2dJ0|u diff --git a/fixtures/exif/Portrait_3_out.jpg b/fixtures/exif/Portrait_3_out.jpg index f45c5d01ac0413d3bfd900198be229409607c952..8a8da006b1ed6251109bc7079c7a1ccf4c18cd1c 100644 GIT binary patch delta 784 zcmX@LnrqEQuKNEs{y$(4@N)BXV_;-tU|(~rZF)1`Z8!SFfed1urUfT zFauePAd*pvffdYVU^*=ACM8)!MAIm z5Mf}rtP3&>yBeILTq&u=$w1jZKpdA`P*eg8yBHvwyS$_T#Li%-XJ8OX$_8_4fD$4_ zKqmqvfWg5ak`7@n0kM-H>>Xe=AwkYSHD`cqhjb)%5)vC~F;EEubFvYL!VZA;lLtyt zD}X*=VDOA!U;qUx#1uqmA;g%)fNn4bridj7vHV303>II3;`I{{f=M$O7`C@EFi6}& zh^Z`KVBl|IVAys(xwNPZVhMv3kUq_Lk~x`m5=S=oHvxOmKxq@jkD3#VB&;X7u?CjM zzRfPEV(r{Gt7c8+{@TljUmE=X|Nl0FGXon7D;p~d8yhPdJ3AW(mjG9zM5_ejRtcs} FQvu6@d2Rpz delta 22 ecmZ3pk?YiIE~fuCnx8PWKVf3r{)CC?#8d!&c?y#N diff --git a/fixtures/exif/Portrait_4_out.jpg b/fixtures/exif/Portrait_4_out.jpg index 592776b60bc4a6d01dc0be56439f8ea8159f93c2..2528749a93b110e87f84d6f0a3e3e35c14dc2c92 100644 GIT binary patch delta 784 zcmbQbl(~rZF)1`Z8!SFfed1urUfT zFaueP3@kuGih&i(W?%?ol!mk87&V}3m>3wCgrRJpdF`1XT_BSgfM$Y$2ap8u>mdx* z2@DMEKrV}ck)go?7~9amU;!h=!1UoaEeMCIJS9+`N*aAa^H)h{z}f_B%j}C4r`DGFT=i*B2K!1_bzkjKB`Q zT?4z5;j%8sFzjk@igKl-7AFH`{{V4ZazRlE(9?9;M)MB6#2IgcV5QQB8?I#bE zq*efZz`)=c!N33tR){Hx&_akYivitW3``MA5Mud@7#J+R0>$emAOw?UGB9j!WnhrF zg%DF&z`(%Y!oaZYd~#_~8N?C>DIk5C@g#FH>m-hB?r#G2qJh#TiXSy67)e-9a$^lF zkA0h6P{rE0aaPTm%>A{O55F|{|NsAO24@B~7FIS^7B)6kHg(~rZF)1`Z8!SFfed1urUfT zFaueP46Hyx3PgfbGK4Wo!`X3+8c;P%3=B-dP&QCidnN-5R6Wp4Fz|r#>mdx*2@DME zKp_?bBSV7)Ft(wA!2(8zG5`NFFf3q#8N;$+0W*xv<^a^k@c$8$jHk16d_a)Do2QQ} z*e^^xImx-jOacrHxp^f;LGDfp5s^^}?00|;mjs%s$zYk7Twh$^7!cqCG6FmJb`9)L zhReDj!?3HtDaw_STAU1&{R6~t$pu9vz(9)uvboDk3P9`(hI$4Dk)&)erv@k?QUr7& zPy!en3?k_e_7V^~3Buk1RudBB3{-Ol$aY9aVkaT7p%w#`Ffb<@fhg<%Xg_(NB((zQ z0|o}q2nGgFutH2hgcd@KSq$g~V_=F{f)LAJ#K2(j6)0Xm0U?+)lYwD-D+7bXErgiL z0tN>D76yiG=aWl|${?07NCD~7j3=3sStoI1bAJ=C7Y&p)QT(Vm!AQb-k{fGadFa* z*nvVU21bSk3t((R1A_&O5M%!TXJA;s1T%(Z!vba)o6P~JkKz9#CK*p>=lFmie>YDb zSFm50cyf|+iL$@>w*l!t_G(lS4wJeGEnvp5XU7K6qNwOE(XZvE-xtnu`?Lz85l&8vca4hpoB;f z(1}0^U~n*qq(j(CKM%~VA4zmhV88k3=+2x zVk!$582DQl7`B~HE-fm9Si&F$q)#)RWKL$C#F5SYO~76>P})TCqvix73F}F2tbygR zZ?g-kSUWe)s#%k{zxMLsmj?g;|G&-P%)rLN%ErpV#>UFV&d$ccCBW4v(JH~XRf6f` FHUMMqdQ<=a delta 22 ecmaF;nXB_17t{Y6%}(~rZF)1`Z8!SFfed1urUfT zFaueP4D3Kcih&i(W?%?ol!mk87&V}3m>3wCgrRJpdF`1DEKv18Gr_1H%F)m@zCH7BIuuYz{zu4F4Z7$#^n9)tlV&n7Y;R>?khp~q zQ(3^kz~92au>pwU-aSH2DAj|7`|m1~wK}HdYokHdZ!vb~X+!0j@@gRtd(f5=>5; E0F)4Uu>b%7 delta 22 ecmdn(~rZF)1`Z8!SFfed1urUfT zFauePKsE!T6ay=m&A<@GC=F-FF={~7FflMN2}9XH^V%~RSfJ{GW`cnSlwS{FuufoL zUk(QEoKs6V93oYDGG9TQizC*QeeLW^n@hPR80oU#N_(o0>^*=ACM8)!MAIm z5Mf}rtP3&>yBeILTq&u=$w1jZKpdA`P*eg8yBHvwyS$_T#Li%-XJ8OX$_8_4fD$4_ zKqmqvfWg5ak`7@n0kM-H>>Xe=AwkYSHD`cqhjb)%5)vC~F;EEubFvYL!VZA;lLtyt zD}X*=VDOA!U;qUx#1uqmA;g%)fNn4bridj7vHV303>II3;`I{{f=M$O7`C@EFi6}& zh^Z`KVBl|IVAys(xwNPZVhMv3kUq_Lk~x`m5=S=oHvxOmKxq@jkD3#VB&;X7u?CjM zzRfPEV(r{Gt7c8+{@TljUmE=X|Nl0FGXon7D;p~d8yhPdJ3AW(mjG9zM5_ejRtYAB F?EnMad1U|q delta 22 ecmbRBg=@z8H5;_ zK~i8W#mEY#y?}gaC_4zq)_|&E0Mo!Hl4p7?>6SRfq$n_5;;3 UgE&C;N|0V4Xk^;T#JG1i0HyO7vj6}9 delta 16 YcmccogKhtJHm3hK8mDcY#<+Jk08o?(LI3~& diff --git a/fixtures/test_pdf.jpg b/fixtures/test_pdf.jpg index 1058bb0edda0c146d0ad9096a204ce8b17c36b10..bbb26c5251fc79aa9a9d121774e268893de2c0ea 100644 GIT binary patch delta 162 zcmX@`kNL`f=KB9P{y$(4@N)BXV_;-tU|8H5;_ zK~i8W#mEY#y?}gaC_4zq)_|&E02Q6vzMo delta 13 VcmccepZUN)W~To)Hcqqq4*)l<2lW5| diff --git a/fixtures/test_svg.jpg b/fixtures/test_svg.jpg index d20c14dbbeef3e6262767aa967cfd9497a36e547..77b4714e2d652cf5a1dd17b9915c598250e65507 100644 GIT binary patch delta 165 zcmZ3wn0@CG_WJ)f{y$(4@N)BXV_;-tU|8H5;_ zK~i8W#mEY#y?}gaC_4zq)_|&E0pF diff --git a/options.go b/options.go index d7ee592..f155f5e 100644 --- a/options.go +++ b/options.go @@ -204,6 +204,7 @@ type Options struct { NoAutoRotate bool NoProfile bool Interlace bool + StripMetadata bool Extend Extend Rotate Angle Background Color diff --git a/resizer.go b/resizer.go index cce7b17..eb06fc2 100644 --- a/resizer.go +++ b/resizer.go @@ -161,6 +161,7 @@ func saveImage(image *C.VipsImage, o Options) ([]byte, error) { NoProfile: o.NoProfile, Interpretation: o.Interpretation, OutputICC: o.OutputICC, + StripMetadata: o.StripMetadata, } // Finally get the resultant buffer return vipsSave(image, saveOptions) diff --git a/resize_test.go b/resizer_test.go similarity index 100% rename from resize_test.go rename to resizer_test.go diff --git a/vips.go b/vips.go index fc876c2..fce3050 100644 --- a/vips.go +++ b/vips.go @@ -55,6 +55,7 @@ type vipsSaveOptions struct { Type ImageType Interlace bool NoProfile bool + StripMetadata bool OutputICC string // Absolute path to the output ICC profile Interpretation Interpretation } @@ -420,6 +421,7 @@ func vipsSave(image *C.VipsImage, o vipsSaveOptions) ([]byte, error) { saveErr := C.int(0) interlace := C.int(boolToInt(o.Interlace)) quality := C.int(o.Quality) + strip := C.int(boolToInt(o.Interlace)) if o.Type != 0 && !IsTypeSupportedSave(o.Type) { return nil, fmt.Errorf("VIPS cannot save to %#v", ImageTypes[o.Type]) @@ -427,13 +429,13 @@ func vipsSave(image *C.VipsImage, o vipsSaveOptions) ([]byte, error) { var ptr unsafe.Pointer switch o.Type { case WEBP: - saveErr = C.vips_webpsave_bridge(tmpImage, &ptr, &length, 1, quality) + saveErr = C.vips_webpsave_bridge(tmpImage, &ptr, &length, strip, quality) case PNG: - saveErr = C.vips_pngsave_bridge(tmpImage, &ptr, &length, 1, C.int(o.Compression), quality, interlace) + saveErr = C.vips_pngsave_bridge(tmpImage, &ptr, &length, strip, C.int(o.Compression), quality, interlace) case TIFF: saveErr = C.vips_tiffsave_bridge(tmpImage, &ptr, &length) default: - saveErr = C.vips_jpegsave_bridge(tmpImage, &ptr, &length, 1, quality, interlace) + saveErr = C.vips_jpegsave_bridge(tmpImage, &ptr, &length, strip, quality, interlace) } if int(saveErr) != 0 { diff --git a/vips.h b/vips.h index 067466e..170aa1d 100644 --- a/vips.h +++ b/vips.h @@ -269,7 +269,7 @@ vips_icc_transform_bridge (VipsImage *in, VipsImage **out, const char *output_ic int vips_jpegsave_bridge(VipsImage *in, void **buf, size_t *len, int strip, int quality, int interlace) { return vips_jpegsave_buffer(in, buf, len, - "strip", strip, + "strip", strip == 1 ? TRUE : FALSE, "Q", quality, "optimize_coding", TRUE, "interlace", with_interlace(interlace), @@ -281,7 +281,7 @@ int vips_pngsave_bridge(VipsImage *in, void **buf, size_t *len, int strip, int compression, int quality, int interlace) { #if (VIPS_MAJOR_VERSION >= 8 || (VIPS_MAJOR_VERSION >= 7 && VIPS_MINOR_VERSION >= 42)) return vips_pngsave_buffer(in, buf, len, - "strip", FALSE, + "strip", strip == 1 ? TRUE : FALSE, "compression", compression, "interlace", with_interlace(interlace), "filter", VIPS_FOREIGN_PNG_FILTER_NONE, @@ -289,7 +289,7 @@ vips_pngsave_bridge(VipsImage *in, void **buf, size_t *len, int strip, int compr ); #else return vips_pngsave_buffer(in, buf, len, - "strip", FALSE, + "strip", strip == 1 ? TRUE : FALSE, "compression", compression, "interlace", with_interlace(interlace), NULL @@ -300,7 +300,7 @@ vips_pngsave_bridge(VipsImage *in, void **buf, size_t *len, int strip, int compr int vips_webpsave_bridge(VipsImage *in, void **buf, size_t *len, int strip, int quality) { return vips_webpsave_buffer(in, buf, len, - "strip", strip, + "strip", strip == 1 ? TRUE : FALSE, "Q", quality, NULL ); diff --git a/vips_test.go b/vips_test.go index 8631fd4..9972fdb 100644 --- a/vips_test.go +++ b/vips_test.go @@ -33,7 +33,7 @@ func TestVipsSave(t *testing.T) { for _, typ := range types { image, _, _ := vipsRead(readImage("test.jpg")) - options := vipsSaveOptions{Quality: 95, Type: typ} + options := vipsSaveOptions{Quality: 95, Type: typ, StripMetadata: true} buf, err := vipsSave(image, options) if err != nil {