moved stuff + scanner com/hid edits
This commit is contained in:
2
extensions/golang/DataToolsGO/.gitignore
vendored
Normal file
2
extensions/golang/DataToolsGO/.gitignore
vendored
Normal file
@@ -0,0 +1,2 @@
|
||||
config.json
|
||||
imageTools-*
|
||||
42
extensions/golang/DataToolsGO/build.sh
Executable file
42
extensions/golang/DataToolsGO/build.sh
Executable file
@@ -0,0 +1,42 @@
|
||||
#!/bin/bash
|
||||
|
||||
# Define binary names
|
||||
LINUX_BIN="imageTools-linux"
|
||||
LINUX_ARM_BIN="imageTools-linuxARMv7"
|
||||
WINDOWS_BIN="imageTools-windows.exe"
|
||||
|
||||
echo "Starting build process..."
|
||||
|
||||
# Build for Linux (64-bit)
|
||||
echo "Building for Linux..."
|
||||
GOOS=linux GOARCH=amd64 go build -o "$LINUX_BIN" main.go
|
||||
|
||||
if [ $? -eq 0 ]; then
|
||||
echo "Successfully built: $LINUX_BIN"
|
||||
else
|
||||
echo "Failed to build Linux binary"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Build for Windows (64-bit)
|
||||
echo "Building for Windows..."
|
||||
GOOS=windows GOARCH=amd64 go build -o "$WINDOWS_BIN" main.go
|
||||
|
||||
if [ $? -eq 0 ]; then
|
||||
echo "Successfully built: $WINDOWS_BIN"
|
||||
else
|
||||
echo "Failed to build Windows binary"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Build for Linux ARM (ARMv7)
|
||||
echo "Building for Linux ARMv7..."
|
||||
GOOS=linux GOARCH=arm GOARM=7 go build -o "$LINUX_ARM_BIN" main.go
|
||||
if [ $? -eq 0 ]; then
|
||||
echo "Successfully built: $LINUX_ARM_BIN"
|
||||
else
|
||||
echo "Failed to build Linux ARMv7 binary"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
echo "Build complete."
|
||||
5
extensions/golang/DataToolsGO/go.mod
Normal file
5
extensions/golang/DataToolsGO/go.mod
Normal file
@@ -0,0 +1,5 @@
|
||||
module dataTools
|
||||
|
||||
go 1.25.7
|
||||
|
||||
require github.com/nfnt/resize v0.0.0-20180221191011-83c6a9932646
|
||||
2
extensions/golang/DataToolsGO/go.sum
Normal file
2
extensions/golang/DataToolsGO/go.sum
Normal file
@@ -0,0 +1,2 @@
|
||||
github.com/nfnt/resize v0.0.0-20180221191011-83c6a9932646 h1:zYyBkD/k9seD2A7fsi6Oo2LfFZAehjjQMERAvZLEDnQ=
|
||||
github.com/nfnt/resize v0.0.0-20180221191011-83c6a9932646/go.mod h1:jpp1/29i3P1S/RLdc7JQKbRpFeM1dOBd8T9ki5s+AY8=
|
||||
84
extensions/golang/DataToolsGO/main.go
Normal file
84
extensions/golang/DataToolsGO/main.go
Normal file
@@ -0,0 +1,84 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"flag"
|
||||
"fmt"
|
||||
"image"
|
||||
"image/jpeg"
|
||||
"os"
|
||||
"path/filepath"
|
||||
"strings"
|
||||
|
||||
"github.com/nfnt/resize"
|
||||
)
|
||||
|
||||
func main() {
|
||||
// Command line arguments
|
||||
dirPath := flag.String("dir", "./", "Directory containing images")
|
||||
maxWidth := flag.Uint("width", 1000, "Maximum width for resizing")
|
||||
quality := flag.Int("quality", 75, "JPEG quality (1-100)")
|
||||
flag.Parse()
|
||||
|
||||
files, err := os.ReadDir(*dirPath)
|
||||
if err != nil {
|
||||
fmt.Printf("Error reading directory: %v\n", err)
|
||||
return
|
||||
}
|
||||
|
||||
fmt.Printf("Processing images in %s (Max Width: %d, Quality: %d)\n", *dirPath, *maxWidth, *quality)
|
||||
|
||||
for _, file := range files {
|
||||
if file.IsDir() {
|
||||
continue
|
||||
}
|
||||
|
||||
ext := strings.ToLower(filepath.Ext(file.Name()))
|
||||
if ext != ".jpg" && ext != ".jpeg" && ext != ".png" {
|
||||
continue
|
||||
}
|
||||
|
||||
filePath := filepath.Join(*dirPath, file.Name())
|
||||
processImage(filePath, *maxWidth, *quality)
|
||||
}
|
||||
|
||||
fmt.Println("Done. Your storage can finally breathe again.")
|
||||
}
|
||||
|
||||
func processImage(path string, maxWidth uint, quality int) {
|
||||
file, err := os.Open(path)
|
||||
if err != nil {
|
||||
fmt.Printf("Failed to open %s: %v\n", path, err)
|
||||
return
|
||||
}
|
||||
|
||||
img, _, err := image.Decode(file)
|
||||
file.Close()
|
||||
if err != nil {
|
||||
fmt.Printf("Failed to decode %s: %v\n", path, err)
|
||||
return
|
||||
}
|
||||
|
||||
// Only resize if original is wider than maxWidth
|
||||
bounds := img.Bounds()
|
||||
var finalImg image.Image
|
||||
if uint(bounds.Dx()) > maxWidth {
|
||||
finalImg = resize.Resize(maxWidth, 0, img, resize.Lanczos3)
|
||||
fmt.Printf("Resized and compressed: %s\n", filepath.Base(path))
|
||||
} else {
|
||||
finalImg = img
|
||||
fmt.Printf("Compressed (no resize needed): %s\n", filepath.Base(path))
|
||||
}
|
||||
|
||||
// Overwrite the original file
|
||||
out, err := os.Create(path)
|
||||
if err != nil {
|
||||
fmt.Printf("Failed to create output file %s: %v\n", path, err)
|
||||
return
|
||||
}
|
||||
defer out.Close()
|
||||
|
||||
err = jpeg.Encode(out, finalImg, &jpeg.Options{Quality: quality})
|
||||
if err != nil {
|
||||
fmt.Printf("Failed to encode %s: %v\n", path, err)
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user