|
@@ -37,7 +37,6 @@ func (g *Gateway) ImageLibRegister() {
|
|
|
}
|
|
|
|
|
|
func (g *Gateway) injectImageLibFunctions(vm *otto.Otto, u *user.User) {
|
|
|
-
|
|
|
//Get image dimension, requires filepath (virtual)
|
|
|
vm.Set("_imagelib_getImageDimension", func(call otto.FunctionCall) otto.Value {
|
|
|
imageFileVpath, err := call.Argument(0).ToString()
|
|
@@ -57,9 +56,22 @@ func (g *Gateway) injectImageLibFunctions(vm *otto.Otto, u *user.User) {
|
|
|
return otto.FalseValue()
|
|
|
}
|
|
|
|
|
|
- panic("fix point 1")
|
|
|
+ openingPath := imagePath
|
|
|
+ var closerFunc func()
|
|
|
+ if fsh.RequireBuffer {
|
|
|
+ bufferPath, cf := g.getUserSpecificTempFilePath(u, imagePath)
|
|
|
+ closerFunc = cf
|
|
|
+ defer closerFunc()
|
|
|
+ c, err := fsh.FileSystemAbstraction.ReadFile(imagePath)
|
|
|
+ if err != nil {
|
|
|
+ g.raiseError(errors.New("Read from file system failed: " + err.Error()))
|
|
|
+ return otto.FalseValue()
|
|
|
+ }
|
|
|
+ os.WriteFile(bufferPath, c, 0775)
|
|
|
+ openingPath = bufferPath
|
|
|
+ }
|
|
|
|
|
|
- file, err := os.Open(imagePath)
|
|
|
+ file, err := os.Open(openingPath)
|
|
|
if err != nil {
|
|
|
g.raiseError(err)
|
|
|
return otto.FalseValue()
|
|
@@ -103,7 +115,7 @@ func (g *Gateway) injectImageLibFunctions(vm *otto.Otto, u *user.User) {
|
|
|
}
|
|
|
|
|
|
//Convert the virtual paths to real paths
|
|
|
- _, rsrc, err := virtualPathToRealPath(vsrc, u)
|
|
|
+ srcfsh, rsrc, err := virtualPathToRealPath(vsrc, u)
|
|
|
if err != nil {
|
|
|
g.raiseError(err)
|
|
|
return otto.FalseValue()
|
|
@@ -128,19 +140,47 @@ func (g *Gateway) injectImageLibFunctions(vm *otto.Otto, u *user.User) {
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+ resizeOpeningFile := rsrc
|
|
|
+ resizeWritingFile := rdest
|
|
|
+ var srcCloser func()
|
|
|
+ var destCloser func()
|
|
|
+ if srcfsh.RequireBuffer {
|
|
|
+ resizeOpeningFile, srcCloser, err = g.bufferRemoteResourcesToLocal(srcfsh, u, rsrc)
|
|
|
+ if err != nil {
|
|
|
+ g.raiseError(err)
|
|
|
+ return otto.FalseValue()
|
|
|
+ }
|
|
|
+ defer srcCloser()
|
|
|
+ }
|
|
|
+
|
|
|
+ if destfsh.RequireBuffer {
|
|
|
+ resizeWritingFile, destCloser, err = g.bufferRemoteResourcesToLocal(destfsh, u, rdest)
|
|
|
+ if err != nil {
|
|
|
+ g.raiseError(err)
|
|
|
+ return otto.FalseValue()
|
|
|
+ }
|
|
|
+ defer destCloser()
|
|
|
+ }
|
|
|
+
|
|
|
//Resize the image
|
|
|
- src, err := imaging.Open(rsrc)
|
|
|
+ src, err := imaging.Open(resizeOpeningFile)
|
|
|
if err != nil {
|
|
|
//Opening failed
|
|
|
g.raiseError(err)
|
|
|
return otto.FalseValue()
|
|
|
}
|
|
|
src = imaging.Resize(src, int(width), int(height), imaging.Lanczos)
|
|
|
- err = imaging.Save(src, rdest)
|
|
|
+ err = imaging.Save(src, resizeWritingFile)
|
|
|
if err != nil {
|
|
|
g.raiseError(err)
|
|
|
return otto.FalseValue()
|
|
|
}
|
|
|
+
|
|
|
+ if destfsh.RequireBuffer {
|
|
|
+ c, _ := os.ReadFile(resizeWritingFile)
|
|
|
+ destfsh.FileSystemAbstraction.WriteFile(rdest, c, 0775)
|
|
|
+ }
|
|
|
+
|
|
|
return otto.TrueValue()
|
|
|
})
|
|
|
|
|
@@ -181,6 +221,7 @@ func (g *Gateway) injectImageLibFunctions(vm *otto.Otto, u *user.User) {
|
|
|
}
|
|
|
|
|
|
//Convert the virtual paths to realpaths
|
|
|
+
|
|
|
srcFsh, rsrc, err := virtualPathToRealPath(vsrc, u)
|
|
|
if err != nil {
|
|
|
g.raiseError(err)
|
|
@@ -192,12 +233,21 @@ func (g *Gateway) injectImageLibFunctions(vm *otto.Otto, u *user.User) {
|
|
|
g.raiseError(err)
|
|
|
return otto.FalseValue()
|
|
|
}
|
|
|
- destFshAbs := destFsh.FileSystemAbstraction
|
|
|
- fmt.Println("WIP", destFshAbs)
|
|
|
+ destWritePath := rdest
|
|
|
+ var destCloserFunction func()
|
|
|
+ if destFsh.RequireBuffer {
|
|
|
+ destWritePath, destCloserFunction = g.getUserSpecificTempFilePath(u, rdest)
|
|
|
+ if err != nil {
|
|
|
+ g.raiseError(err)
|
|
|
+ return otto.FalseValue()
|
|
|
+ }
|
|
|
+ defer destCloserFunction()
|
|
|
+ }
|
|
|
|
|
|
//Try to read the source image
|
|
|
imageBytes, err := srcFshAbs.ReadFile(rsrc)
|
|
|
if err != nil {
|
|
|
+ fmt.Println(err)
|
|
|
g.raiseError(err)
|
|
|
return otto.FalseValue()
|
|
|
}
|
|
@@ -209,7 +259,7 @@ func (g *Gateway) injectImageLibFunctions(vm *otto.Otto, u *user.User) {
|
|
|
}
|
|
|
|
|
|
//Crop the image
|
|
|
- croppedImg, err := cutter.Crop(img, cutter.Config{
|
|
|
+ croppedImg, _ := cutter.Crop(img, cutter.Config{
|
|
|
Width: int(width),
|
|
|
Height: int(height),
|
|
|
Anchor: image.Point{int(posx), int(posy)},
|
|
@@ -217,23 +267,30 @@ func (g *Gateway) injectImageLibFunctions(vm *otto.Otto, u *user.User) {
|
|
|
})
|
|
|
|
|
|
//Create the new image
|
|
|
- out, err := os.Create(rdest)
|
|
|
+ out, err := os.Create(destWritePath)
|
|
|
if err != nil {
|
|
|
g.raiseError(err)
|
|
|
return otto.FalseValue()
|
|
|
}
|
|
|
|
|
|
- if strings.ToLower(filepath.Ext(rdest)) == ".png" {
|
|
|
+ if strings.ToLower(filepath.Ext(destWritePath)) == ".png" {
|
|
|
png.Encode(out, croppedImg)
|
|
|
- } else if strings.ToLower(filepath.Ext(rdest)) == ".jpg" {
|
|
|
+ } else if strings.ToLower(filepath.Ext(destWritePath)) == ".jpg" {
|
|
|
jpeg.Encode(out, croppedImg, nil)
|
|
|
} else {
|
|
|
g.raiseError(errors.New("Not supported format: Only support jpg or png"))
|
|
|
return otto.FalseValue()
|
|
|
}
|
|
|
-
|
|
|
out.Close()
|
|
|
|
|
|
+ if destFsh.RequireBuffer {
|
|
|
+ c, _ := os.ReadFile(destWritePath)
|
|
|
+ err := destFsh.FileSystemAbstraction.WriteFile(rdest, c, 0775)
|
|
|
+ if err != nil {
|
|
|
+ fmt.Println(">", err.Error())
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
return otto.TrueValue()
|
|
|
})
|
|
|
|
|
@@ -279,15 +336,26 @@ func (g *Gateway) injectImageLibFunctions(vm *otto.Otto, u *user.User) {
|
|
|
}
|
|
|
|
|
|
//Convert the vsrc to real path
|
|
|
- _, rsrc, err := virtualPathToRealPath(vsrc, u)
|
|
|
+ fsh, rsrc, err := virtualPathToRealPath(vsrc, u)
|
|
|
if err != nil {
|
|
|
g.raiseError(err)
|
|
|
return otto.FalseValue()
|
|
|
}
|
|
|
|
|
|
+ analysisSrc := rsrc
|
|
|
+ var closerFunc func()
|
|
|
+ if fsh.RequireBuffer {
|
|
|
+ analysisSrc, closerFunc, err = g.bufferRemoteResourcesToLocal(fsh, u, rsrc)
|
|
|
+ if err != nil {
|
|
|
+ g.raiseError(err)
|
|
|
+ return otto.FalseValue()
|
|
|
+ }
|
|
|
+ defer closerFunc()
|
|
|
+ }
|
|
|
+
|
|
|
if classifier == "default" || classifier == "darknet19" {
|
|
|
//Use darknet19 for classification
|
|
|
- r, err := neuralnet.AnalysisPhotoDarknet19(rsrc)
|
|
|
+ r, err := neuralnet.AnalysisPhotoDarknet19(analysisSrc)
|
|
|
if err != nil {
|
|
|
g.raiseError(err)
|
|
|
return otto.FalseValue()
|
|
@@ -303,7 +371,7 @@ func (g *Gateway) injectImageLibFunctions(vm *otto.Otto, u *user.User) {
|
|
|
|
|
|
} else if classifier == "yolo3" {
|
|
|
//Use yolo3 for classification, return positions of object as well
|
|
|
- r, err := neuralnet.AnalysisPhotoYOLO3(rsrc)
|
|
|
+ r, err := neuralnet.AnalysisPhotoYOLO3(analysisSrc)
|
|
|
if err != nil {
|
|
|
g.raiseError(err)
|
|
|
return otto.FalseValue()
|