Skip to content

Commit

Permalink
Add support for pano way of sharing 360
Browse files Browse the repository at this point in the history
Fix spelling
Minor tidy-ups
  • Loading branch information
plord12 committed Oct 23, 2023
1 parent 3d16698 commit 274665f
Show file tree
Hide file tree
Showing 6 changed files with 72 additions and 12 deletions.
53 changes: 46 additions & 7 deletions exif.go
Original file line number Diff line number Diff line change
Expand Up @@ -44,6 +44,10 @@ type data struct {
Data string `xml:",chardata"`
}

type panoData struct {
Data string `xml:"ProjectionType,attr"`
}

// FIX THIS - is there a better way ?
var equirectangular bool

Expand All @@ -54,12 +58,6 @@ func is360(file string) bool {
// read xmp data to check if this is a 360 image
//

jpg, err := os.Open(file)
if err != nil {
return false
}
defer jpg.Close()

reader := func(r io.Reader) error {
d := xml.NewDecoder(r)
for {
Expand All @@ -73,7 +71,8 @@ func is360(file string) bool {
case xml.StartElement:
if ty.Name.Local == "ProjectionType" {
var projectionType data
if err = d.DecodeElement(&projectionType, &ty); err != nil {
err = d.DecodeElement(&projectionType, &ty)
if err != nil {
return err
}
if projectionType.Data == "equirectangular" {
Expand All @@ -85,7 +84,47 @@ func is360(file string) bool {
return nil
}

panoReader := func(r io.Reader) error {
println("pano start")
d := xml.NewDecoder(r)
for {
tok, err := d.Token()
if tok == nil || err == io.EOF {
break
} else if err != nil {
return err
}
switch ty := tok.(type) {
case xml.StartElement:
if ty.Name.Local == "Description" {
var projectionType panoData
err = d.DecodeElement(&projectionType, &ty)
if err != nil {
println("pano Description error " + err.Error())
return err
}
if projectionType.Data == "equirectangular" {
equirectangular = true
}
}
}
}
return nil
}

jpg, err := os.Open(file)
if err != nil {
return false
}
jpeg.ScanJPEG(jpg, nil, reader)
jpg.Close()

jpg, err = os.Open(file)
if err != nil {
return false
}
jpeg.ScanJPEG(jpg, nil, panoReader)
jpg.Close()

return equirectangular
}
3 changes: 2 additions & 1 deletion go.mod
Original file line number Diff line number Diff line change
Expand Up @@ -24,10 +24,11 @@ require (
github.com/googleapis/gax-go/v2 v2.7.1 // indirect
github.com/tkrajina/gpxgo v1.2.1 // indirect
go.opencensus.io v0.24.0 // indirect
golang.org/x/image v0.9.0
golang.org/x/net v0.8.0 // indirect
golang.org/x/oauth2 v0.6.0 // indirect
golang.org/x/sys v0.6.0 // indirect
golang.org/x/text v0.8.0 // indirect
golang.org/x/text v0.11.0 // indirect
google.golang.org/api v0.114.0 // indirect
google.golang.org/appengine v1.6.7 // indirect
google.golang.org/genproto v0.0.0-20230306155012-7f2fa6fef1f4 // indirect
Expand Down
10 changes: 10 additions & 0 deletions go.sum
Original file line number Diff line number Diff line change
Expand Up @@ -108,11 +108,14 @@ golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACk
golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc=
golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
golang.org/x/image v0.9.0 h1:QrzfX26snvCM20hIhBwuHI/ThTg18b/+kcKdXHvnR+g=
golang.org/x/image v0.9.0/go.mod h1:jtrku+n79PfroUbvDdeUWMAI+heR786BofxrbiSF+J0=
golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE=
golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU=
golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc=
golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4=
golang.org/x/mod v0.7.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs=
golang.org/x/mod v0.8.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs=
golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
golang.org/x/net v0.0.0-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
Expand All @@ -125,6 +128,7 @@ golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v
golang.org/x/net v0.0.0-20210614182718-04defd469f4e/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y=
golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c=
golang.org/x/net v0.3.0/go.mod h1:MBQ8lrhLObU/6UmLb4fmbmk5OcyYmqtbGd/9yIeKjEE=
golang.org/x/net v0.6.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs=
golang.org/x/net v0.8.0 h1:Zrh2ngAOFYneWTAIAPethzeaQLuHwhuBkuV6ZiRnUaQ=
golang.org/x/net v0.8.0/go.mod h1:QVkue5JL9kW//ek3r6jTKnTFis1tRmNAW2P1shuFdJc=
golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U=
Expand All @@ -150,19 +154,24 @@ golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBc
golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.3.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.6.0 h1:MVltZSvRTcU2ljQOhs94SXPftV6DCNnZViHeQps87pQ=
golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
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=
golang.org/x/term v0.3.0/go.mod h1:q750SLmJuPmVoN1blW3UFBPREJfb1KmY3vwxfr+nFDA=
golang.org/x/term v0.5.0/go.mod h1:jMB1sMXY+tzblOD4FWmEbocvup2/aLOaQEp7JmGp78k=
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk=
golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ=
golang.org/x/text v0.5.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 h1:57P1ETyNKtuIjB4SRd15iJxuhj8Gc416Y78H3qgMh68=
golang.org/x/text v0.8.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8=
golang.org/x/text v0.11.0 h1:LAntKIrcmeSKERyiOh0XMV39LXS8IE9UL2yP7+f5ij4=
golang.org/x/text v0.11.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE=
golang.org/x/time v0.0.0-20200416051211-89c76fbcd5d1 h1:NusfzzA6yGQ+ua51ck7E3omNUX/JuqbFSaRGqU8CcLI=
golang.org/x/time v0.0.0-20200416051211-89c76fbcd5d1/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
Expand All @@ -174,6 +183,7 @@ golang.org/x/tools v0.0.0-20190603231351-8aaa1484dc10/go.mod h1:/rFqwRUd4F7ZHNgw
golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc=
golang.org/x/tools v0.4.0/go.mod h1:UE5sM2OK9E/d67R0ANs2xJizIymRP5gJU295PvKXxjQ=
golang.org/x/tools v0.6.0/go.mod h1:Xwgl3UAJ/d3gWutnCtw505GrjyAbvKui8lOU390QaIU=
golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
google.golang.org/api v0.114.0 h1:1xQPji6cO2E2vLiI+C/XiFAnsn1WV3mjaEwGLhi3grE=
Expand Down
2 changes: 1 addition & 1 deletion google.go
Original file line number Diff line number Diff line change
Expand Up @@ -67,7 +67,7 @@ func uploadGoogleMaps(clientID *string, clientIDFile *string, secret *string, se
// only support 360 images
//
if !is360(imageFilename) {
log.Printf("%s: Donesn't seem to be a 360 picture, skipping picture", imageFilename)
log.Printf("%s: Doesn't seem to be a 360 picture, skipping picture", imageFilename)
continue
}

Expand Down
12 changes: 11 additions & 1 deletion umap.go
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@ import (
"fmt"
"log"
"os"
"os/exec"
"path"
"path/filepath"
"text/template"
Expand Down Expand Up @@ -175,9 +176,17 @@ func createUmapFiles(outputDirectory *string, webURL *string, filenames []string
//
csvPlain.WriteString(fmt.Sprintf("%s,%f,%f\n", path.Base(imageFilename), lat, long))

// create thumbnail
//
thumb := path.Join(*outputDirectory, path.Base(imageFilename)+"-thumb.jpg")
err := exec.Command("convert", imageFilename, "-resize", "450", thumb).Run()
if err != nil {
log.Printf("%s: Unable to create thumbnail: %v, skipping picture\n", imageFilename, err)
continue
}
}

// copy photo
// copy original photo
//
r, err := os.Open(imageFilename)
if err != nil {
Expand All @@ -192,6 +201,7 @@ func createUmapFiles(outputDirectory *string, webURL *string, filenames []string
}
defer w.Close()
w.ReadFrom(r)

}
}

Expand Down
4 changes: 2 additions & 2 deletions umap.template
Original file line number Diff line number Diff line change
Expand Up @@ -56,7 +56,7 @@
},
"iconClass": "Ball",
"popupShape": "Large",
"popupContentTemplate": "{{`{{{`}}{{ .WebURL }}/{photo}.html}}}\n[[{{ .WebURL }}/{photo}.html|Open in new tab]]",
"popupContentTemplate": "# [[{{ .WebURL }}/{photo}.html|Open in new tab]]\n{{`{{{`}}{{ .WebURL }}/{photo}.html}}}",
"color": "DarkOrange",
"description": "",
"id": 2700881,
Expand Down Expand Up @@ -101,7 +101,7 @@
"name": "Photos",
"iconClass": "Ball",
"popupShape": "Large",
"popupContentTemplate": "{{`{{`}}{{ .WebURL }}/{photo}}}\n[[{{ .WebURL }}/{photo}|Open in new tab]]",
"popupContentTemplate": "# [[{{ .WebURL }}/{photo}|Open in new tab]]\n{{`{{`}}{{ .WebURL }}/{photo}-thumb.jpg}}",
"id": 2700884,
"labelKey": "photo",
"showLabel": null
Expand Down

0 comments on commit 274665f

Please sign in to comment.