file_swf.py 2.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465
  1. """
  2. .swf文件的处理
  3. """
  4. import subprocess, os
  5. from file_processing.file_picture import ocr_patch
  6. from loguru import logger
  7. from docs.config import error_number
  8. def read_swf(file_path: str):
  9. swf_picture_paths, status = extract_swf(file_path)
  10. image_list = []
  11. img_str = ""
  12. for position, img_path in swf_picture_paths:
  13. if os.path.exists(img_path):
  14. image_list.append((position, img_path))
  15. print(f"image_list-->{image_list}")
  16. if image_list:
  17. ocr_text = ocr_patch(image_list)
  18. list_data = sorted(ocr_text.items(), key=lambda x: x[0], reverse=False)
  19. img_str = '\n'.join([v[1] for v in list_data])
  20. return img_str, status
  21. def extract_swf(file_path):
  22. """
  23. 解压到.swf文件夹中,返回文件路径列表(有序)
  24. :param file_path:
  25. :return:
  26. """
  27. swf_picture_paths = []
  28. swf_to_picture_dir = os.path.dirname(file_path)
  29. try:
  30. # 抽取swf,获取图片路径
  31. output = subprocess.check_output('./extract.sh %s %s' % (file_path, swf_to_picture_dir), shell=True)
  32. output_string = output.decode()
  33. picture_num = output_string.split('\n')
  34. if len(picture_num) > 5:
  35. return str(output_string)
  36. else:
  37. if picture_num[0] != '':
  38. for i in picture_num[0].split(','):
  39. swf_to_picture_path = os.path.join(swf_to_picture_dir, '%s.jpg' % (i.strip()))
  40. swf_picture_paths.append(swf_to_picture_path)
  41. if picture_num[1] != '':
  42. for i in picture_num[1].split(','):
  43. swf_to_picture_path = os.path.join(swf_to_picture_dir, '%s.png' % (i.strip()))
  44. swf_picture_paths.append(swf_to_picture_path)
  45. except subprocess.CalledProcessError as e:
  46. logger.error('swf文件解析出错')
  47. logger.error(e)
  48. return [], error_number["解析错误"]
  49. # 对图片进行排序
  50. try:
  51. swf_picture_dict = dict([(int(p.split("/")[-1].split(".")[0]), p) for p in swf_picture_paths])
  52. print(f"swf_picture_dict-->{swf_picture_dict}")
  53. swf_picture_paths = sorted(swf_picture_dict.items(), key=lambda x: x[0])
  54. except Exception as e:
  55. logger.warning(f"{e}")
  56. return swf_picture_paths, error_number["成功"]