MCPcopy Create free account
hub / github.com/imgproxy/imgproxy / stripXMP

Function stripXMP

processing/strip_metadata.go:50–104  ·  view source on GitHub ↗
(img *vips.Image)

Source from the content-addressed store, hash-verified

48}
49
50func stripXMP(img *vips.Image) []byte {
51 xmpData, err := img.GetBlob("xmp-data")
52 if err != nil || len(xmpData) == 0 {
53 return nil
54 }
55
56 xmpDoc, err := xmp.Read(bytes.NewReader(xmpData))
57 if err != nil {
58 return nil
59 }
60
61 namespaces := xmpDoc.Namespaces()
62 filteredNs := namespaces[:0]
63
64 for _, ns := range namespaces {
65 if ns.Name == "dc" || ns.Name == "xmpRights" || ns.Name == "cc" {
66 filteredNs = append(filteredNs, ns)
67 }
68 }
69 xmpDoc.FilterNamespaces(filteredNs)
70
71 nodes := xmpDoc.Nodes()
72 for _, n := range nodes {
73 if n.Name() == "dc" {
74 filteredNodes := n.Nodes[:0]
75 for _, nn := range n.Nodes {
76 name := nn.Name()
77 if name == "rights" || name == "contributor" || name == "creator" || name == "publisher" {
78 filteredNodes = append(filteredNodes, nn)
79 }
80 }
81 n.Nodes = filteredNodes
82
83 filteredAttrs := n.Attr[:0]
84 for _, a := range n.Attr {
85 name := a.Name.Local
86 if name == "dc:rights" || name == "dc:contributor" || name == "dc:creator" || name == "dc:publisher" {
87 filteredAttrs = append(filteredAttrs, a)
88 }
89 }
90 n.Attr = filteredAttrs
91 }
92 }
93
94 if len(xmpDoc.Nodes()) == 0 {
95 return nil
96 }
97
98 xmpData, err = xmp.Marshal(xmpDoc)
99 if err != nil {
100 return nil
101 }
102
103 return xmpData
104}
105
106func (p *Processor) stripMetadata(c *Context) error {
107 if !c.PO.StripMetadata() {

Callers 1

stripMetadataMethod · 0.85

Calls 2

GetBlobMethod · 0.80
ReadMethod · 0.45

Tested by

no test coverage detected