mirror of
https://github.com/httprunner/httprunner.git
synced 2026-09-08 17:09:33 +08:00
fix: 修复压缩方法失效和压缩慢的问题
This commit is contained in:
@@ -61,6 +61,7 @@ func (dExt *XTDriver) GetScreenResult(opts ...option.ActionOption) (screenResult
|
|||||||
}
|
}
|
||||||
|
|
||||||
var bufSource *bytes.Buffer
|
var bufSource *bytes.Buffer
|
||||||
|
var compressBufSource *bytes.Buffer
|
||||||
var imageResult *ai.CVResult
|
var imageResult *ai.CVResult
|
||||||
var imagePath string
|
var imagePath string
|
||||||
var windowSize types.Size
|
var windowSize types.Size
|
||||||
@@ -69,10 +70,14 @@ func (dExt *XTDriver) GetScreenResult(opts ...option.ActionOption) (screenResult
|
|||||||
// get screenshot info with retry
|
// get screenshot info with retry
|
||||||
for i := 0; i < 3; i++ {
|
for i := 0; i < 3; i++ {
|
||||||
imagePath = filepath.Join(config.ScreenShotsPath, fileName)
|
imagePath = filepath.Join(config.ScreenShotsPath, fileName)
|
||||||
bufSource, err = dExt.ScreenShot(option.WithScreenShotFileName(imagePath))
|
bufSource, err = dExt.ScreenShot()
|
||||||
|
if err != nil {
|
||||||
|
lastErr = err
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
compressBufSource, err = compressImageBuffer(bufSource)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
lastErr = err
|
lastErr = err
|
||||||
time.Sleep(time.Second * 1)
|
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -83,12 +88,12 @@ func (dExt *XTDriver) GetScreenResult(opts ...option.ActionOption) (screenResult
|
|||||||
}
|
}
|
||||||
|
|
||||||
screenResult = &ScreenResult{
|
screenResult = &ScreenResult{
|
||||||
bufSource: bufSource,
|
bufSource: compressBufSource,
|
||||||
ImagePath: imagePath,
|
ImagePath: imagePath,
|
||||||
Tags: nil,
|
Tags: nil,
|
||||||
Resolution: windowSize,
|
Resolution: windowSize,
|
||||||
}
|
}
|
||||||
imageResult, err = dExt.CVService.ReadFromBuffer(bufSource, opts...)
|
imageResult, err = dExt.CVService.ReadFromBuffer(compressBufSource, opts...)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Error().Err(err).Msg("ReadFromBuffer from ImageService failed")
|
log.Error().Err(err).Msg("ReadFromBuffer from ImageService failed")
|
||||||
lastErr = err
|
lastErr = err
|
||||||
@@ -222,7 +227,11 @@ func saveScreenShot(raw *bytes.Buffer, fileName string) (string, error) {
|
|||||||
encoder := png.Encoder{
|
encoder := png.Encoder{
|
||||||
CompressionLevel: png.BestCompression,
|
CompressionLevel: png.BestCompression,
|
||||||
}
|
}
|
||||||
|
time1 := time.Now()
|
||||||
|
log.Info().Str("time1", time1.String()).Msg("png encode start")
|
||||||
err = encoder.Encode(file, img)
|
err = encoder.Encode(file, img)
|
||||||
|
time2 := time.Now()
|
||||||
|
log.Info().Int64("time", time2.Sub(time1).Milliseconds()).Msg("png encode time")
|
||||||
case "gif":
|
case "gif":
|
||||||
gifOptions := &gif.Options{
|
gifOptions := &gif.Options{
|
||||||
NumColors: 256,
|
NumColors: 256,
|
||||||
@@ -246,3 +255,32 @@ func saveScreenShot(raw *bytes.Buffer, fileName string) (string, error) {
|
|||||||
|
|
||||||
return screenshotPath, nil
|
return screenshotPath, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func compressImageBuffer(raw *bytes.Buffer) (compressed *bytes.Buffer, err error) {
|
||||||
|
// 解码原始图像数据
|
||||||
|
img, format, err := image.Decode(raw)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
// 创建一个用来保存压缩后数据的buffer
|
||||||
|
var buf bytes.Buffer
|
||||||
|
|
||||||
|
switch format {
|
||||||
|
// Convert to jpeg uniformly and compress with a compression rate of 95
|
||||||
|
case "jpeg", "png":
|
||||||
|
jpegOptions := &jpeg.Options{Quality: 60}
|
||||||
|
time1 := time.Now()
|
||||||
|
err = jpeg.Encode(&buf, img, jpegOptions)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
time2 := time.Now()
|
||||||
|
log.Info().Int64("time", time2.Sub(time1).Milliseconds()).Msg("jpeg encode time")
|
||||||
|
default:
|
||||||
|
return nil, fmt.Errorf("unsupported image format: %s", format)
|
||||||
|
}
|
||||||
|
|
||||||
|
// 返回压缩后的图像数据
|
||||||
|
return &buf, nil
|
||||||
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user