fix block ci cd
Some checks failed
Deploy on Master Change / deploy (push) Has been cancelled

This commit is contained in:
2026-07-13 15:52:35 +07:00
parent b56c6d722c
commit 0ff025fb15
13 changed files with 134 additions and 17 deletions

View File

@@ -6,11 +6,35 @@ import (
"bytes"
"encoding/base64"
"fmt"
"image"
"image/jpeg"
"github.com/kbinani/screenshot"
)
// resizeRGBA resizes a *image.RGBA image using Nearest-Neighbor scaling for maximum performance.
func resizeRGBA(src *image.RGBA, width, height int) *image.RGBA {
dst := image.NewRGBA(image.Rect(0, 0, width, height))
srcBounds := src.Bounds()
dx := srcBounds.Dx()
dy := srcBounds.Dy()
minX := srcBounds.Min.X
minY := srcBounds.Min.Y
for y := 0; y < height; y++ {
srcY := minY + (y * dy) / height
for x := 0; x < width; x++ {
srcX := minX + (x * dx) / width
srcOffset := src.PixOffset(srcX, srcY)
dstOffset := dst.PixOffset(x, y)
copy(dst.Pix[dstOffset:dstOffset+4], src.Pix[srcOffset:srcOffset+4])
}
}
return dst
}
// CaptureScreen chụp màn hình chính và trả về chuỗi Base64 dạng "data:image/jpeg;base64,..."
// Non-darwin: dùng kbinani/screenshot
func CaptureScreen() (string, error) {
@@ -26,9 +50,36 @@ func CaptureScreen() (string, error) {
return "", fmt.Errorf("failed to capture screen: %w", err)
}
// Tối ưu hóa kích thước ảnh giống dự án Raia:
// Giới hạn chiều rộng tối đa là 1024px và chiều cao tối đa là 768px để giảm dung lượng mạng.
dx := bounds.Dx()
dy := bounds.Dy()
maxWidth := 1024
maxHeight := 768
newWidth := dx
newHeight := dy
if dx > maxWidth || dy > maxHeight {
ratioWidth := float64(maxWidth) / float64(dx)
ratioHeight := float64(maxHeight) / float64(dy)
ratio := ratioWidth
if ratioHeight < ratioWidth {
ratio = ratioHeight
}
newWidth = int(float64(dx) * ratio)
newHeight = int(float64(dy) * ratio)
}
var finalImg image.Image = img
if newWidth != dx || newHeight != dy {
finalImg = resizeRGBA(img, newWidth, newHeight)
}
var buf bytes.Buffer
// Nén chất lượng JPEG khoảng 50% để truyền tải mượt mà qua mạng
err = jpeg.Encode(&buf, img, &jpeg.Options{Quality: 50})
err = jpeg.Encode(&buf, finalImg, &jpeg.Options{Quality: 50})
if err != nil {
return "", fmt.Errorf("failed to encode jpeg: %w", err)
}