折腾:
【未解决】安卓手机Vivo的iQOO U1x的安卓游戏自动化测试速度很慢平均每次输出要10多秒
期间,去试试
用自己之前写的resize image的代码
看看:
保持分辨率不变,处理图片后,图片文件大小是否会变小
代码:
if self.isAndroid:
fullImgFilePath = self.driver.screenshot(fullImgFilePath)
# optimize size
displayInfo = self.driver.device_info["display"] # {'width': 720, 'height': 1600}
originSize = (displayInfo["height"], displayInfo["width"])
CommonUtils.resizeImage(fullImgFilePath, originSize, outputImageFile=fullImgFilePath)utils/common_utils.py
@staticmethod
def resizeImage(inputImage,
newSize,
resample=cfgDefaultImageResample,
outputFormat=None,
outputImageFile=None
):
"""
resize input image
resize normally means become smaller, reduce size
:param inputImage: image file object(fp) / filename / binary bytes
:param newSize: (width, height)
:param resample: PIL.Image.NEAREST, PIL.Image.BILINEAR, PIL.Image.BICUBIC, or PIL.Image.LANCZOS
https://pillow.readthedocs.io/en/stable/reference/Image.html#PIL.Image.Image.thumbnail
:param outputFormat: PNG/JPEG/BMP/GIF/TIFF/WebP/..., more refer:
https://pillow.readthedocs.io/en/stable/handbook/image-file-formats.html
if input image is filename with suffix, can omit this -> will infer from filename suffix
:param outputImageFile: output image file filename
:return:
input image file filename: output resized image to outputImageFile
input image binary bytes: resized image binary bytes
"""
openableImage = None
if isinstance(inputImage, str):
openableImage = inputImage
elif CommonUtils.isFileObject(inputImage):
openableImage = inputImage
elif isinstance(inputImage, bytes):
inputImageLen = len(inputImage)
openableImage = io.BytesIO(inputImage)
if openableImage:
imageFile = Image.open(openableImage)
elif isinstance(inputImage, Image.Image):
imageFile = inputImage
# <PIL.PngImagePlugin.PngImageFile image mode=RGBA size=3543x3543 at 0x1065F7A20>
imageFile.thumbnail(newSize, resample)
if outputImageFile:
# save to file
# imageFile.save(outputImageFile)
CommonUtils.saveImage(imageFile, outputImageFile)
imageFile.close()
else:
# save and return binary byte
imageOutput = io.BytesIO()
# imageFile.save(imageOutput)
outputImageFormat = None
if outputFormat:
outputImageFormat = outputFormat
elif imageFile.format:
outputImageFormat = imageFile.format
imageFile.save(imageOutput, outputImageFormat)
imageFile.close()
compressedImageBytes = imageOutput.getvalue()
compressedImageLen = len(compressedImageBytes)
compressRatio = float(compressedImageLen)/float(inputImageLen)
print("%s -> %s, resize ratio: %d%%" % (inputImageLen, compressedImageLen, int(compressRatio * 100)))
return compressedImageBytes
@staticmethod
def saveImage(pillowImage, outputImageFile):
foundJpeg = re.search("\.jpe?g$", outputImageFile, re.I) # <re.Match object; span=(66, 70), match='.jpg'>
isSaveJpeg = bool(foundJpeg) # True
if isSaveJpeg:
if pillowImage.mode in ("RGBA", "P"): # 'RGBA'
# JPEG not support 'Alpha' transparency, so need convert to RGB, before save RGBA/P to jpeg
pillowImage = pillowImage.convert("RGB")
# <PIL.Image.Image image mode=RGB size=1600x720 at 0x107E5DAF0>
pillowImage.save(outputImageFile)
# 'debug/Android/app/游戏app/screenshot/20201208_142621_drawRect_154x42.jpg'效果:
‘debug/Android/app/游戏app/screenshot/20201208_205117.jpg’

resize后,从1.4MB 变 135KB 且注意分辨率都是1600×720,并没变化
最新代码详见:
【后记】
调试遇到报错:
# imageFile.save(outputImageFile) CommonUtils.saveImage(imageFile, outputImageFile) imageFile.close()
错误:
save file time: 0:00:00.000340
[201208 21:49:10][AppCrawler.py 90 ] unrecognized data stream contents when reading image file
Traceback (most recent call last):
File "/Users/xxx/dev/xxx/crawler/appAutoCrawler/AppCrawler/src/AppCrawler.py", line 84, in start
self.set_InitialUrl()
File "/Users/xxx/dev/xxx/crawler/appAutoCrawler/AppCrawler/src/AppCrawler.py", line 159, in set_InitialUrl
self.doGameAutoTest()
File "/Users/xxx/dev/xxx/crawler/appAutoCrawler/AppCrawler/src/AppCrawler.py", line 782, in doGameAutoTest
while (curRetryNum <= intoHomePageCheckMaxRetryNum) and (not self.waitStartToHome(curRetryNum)):
File "/Users/xxx/dev/xxx/crawler/appAutoCrawler/AppCrawler/src/AppCrawler.py", line 274, in waitStartToHome
self.tryAutoClickAndClosePopup()
File "/Users/xxx/dev/xxx/crawler/appAutoCrawler/AppCrawler/src/common/MainUtils.py", line 5155, in tryAutoClickAndClosePopup
self.tryAutoClickTip()
File "/Users/xxx/dev/xxx/crawler/appAutoCrawler/AppCrawler/src/common/MainUtils.py", line 5082, in tryAutoClickTip
isAutoClick, matchResult, imgPath, wordsResultJson = self.isAutoClickTipPage(isRespFullInfo=True)
File "/Users/xxx/dev/xxx/crawler/appAutoCrawler/AppCrawler/src/common/MainUtils.py", line 5066, in isAutoClickTipPage
imgPath = self.getCurScreenshot()
File "/Users/xxx/dev/xxx/crawler/appAutoCrawler/AppCrawler/src/common/DevicesMethods.py", line 4789, in getCurScreenshot
CommonUtils.resizeImage(fullImgFilePath, originSize, outputImageFile=fullImgFilePath)
File "/Users/xxx/dev/xxx/crawler/appAutoCrawler/AppCrawler/utils/common_utils.py", line 420, in resizeImage
CommonUtils.saveImage(imageFile, outputImageFile)
File "/Users/xxx/dev/xxx/crawler/appAutoCrawler/AppCrawler/utils/common_utils.py", line 375, in saveImage
pillowImage = pillowImage.convert("RGB")
File "/Users/xxx/dev/xxx/crawler/appAutoCrawler/AppCrawler/venv/lib/python3.8/site-packages/PIL/Image.py", line 873, in convert
self.load()
File "/Users/xxx/dev/xxx/crawler/appAutoCrawler/AppCrawler/venv/lib/python3.8/site-packages/PIL/ImageFile.py", line 270, in load
raise_ioerror(err_code)
File "/Users/xxx/dev/xxx/crawler/appAutoCrawler/AppCrawler/venv/lib/python3.8/site-packages/PIL/ImageFile.py", line 59, in raise_ioerror
raise OSError(message + " when reading image file")
OSError: unrecognized data stream contents when reading image file需要抽空去搞清楚原因。
转载请注明:在路上 » 【已解决】Python处理图片保持分辨率不变希望降低图片文件大小