Guest User

Untitled

a guest
Apr 12th, 2023
376
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.47 KB | None | 0 0
  1. from bs4 import BeautifulSoup
  2. import json
  3. import base64
  4. from PIL import Image
  5. from io import BytesIO
  6.  
  7. #REPLACE .HAR !!!
  8. with open('ripanimalfull.har', 'r') as archivo:
  9. contenido = archivo.read()
  10. datos = json.loads(contenido)
  11.  
  12. #Extraemos cada registro del logger
  13. entries = datos['log']['entries']
  14.  
  15. #Lugar donde guardamos el scramble de cada imagen
  16. scrambleReg = []
  17. imgReg = []
  18.  
  19. #Recorremos las transacciones
  20. for entry in entries:
  21. response = entry['response']
  22.  
  23.  
  24. #Para cada transaccion de la network buscamos las responses de tipo "application/octet-stream"
  25. #Entramos a la request correspondiente a esa response y buscamos el nombre de la imagen los queryString
  26. #Tomamos el campo "text" de la respuesta y lo convertimos en una imagen. La guardamos usando el nombre recuperado
  27. if response['content']["mimeType"] == "application/octet-stream":
  28. for qs in entry["request"]["queryString"]:
  29. if qs["name"] == "file":
  30. imgName = qs["value"].split(".")[0].split("_")[0]
  31. imgReg.append({
  32. "img": imgName,
  33. "data": response['content']["text"]
  34. })
  35. #image_bytes = base64.b64decode(response['content']["text"])
  36. #with open(imgName+'.jpg', 'wb') as archivo:
  37. # archivo.write(image_bytes)
  38.  
  39.  
  40. #Para cada transaccion de la network buscamos las responses de tipo "text/xml"
  41. #Buscamos si la respuesta contiene datos dentro de una tag llamada "scramble" (usamos html.parser para recorrer el string)
  42. #En caso de encontrarlo buscamos en la request correspondiente el nombre del archivo al cual corresponde el "scramble" (esta en los queryString)
  43. #Guardamos ambos valores
  44. if response['content']["mimeType"] == "text/xml":
  45. if "text" in response["content"]:
  46. soup = BeautifulSoup(response["content"]["text"], 'html.parser')
  47. scramble = soup.find('scramble')
  48. if scramble is not None:
  49. scramble = scramble.string
  50. if scramble is not None:
  51. for qs in entry["request"]["queryString"]:
  52. if qs["name"] == "file":
  53. scrambleReg.append({
  54. "img": qs["value"].split(".")[0],
  55. "scramble": scramble.split(',')
  56. })
  57.  
  58. #frameW = 352
  59. #frameH = 496
  60.  
  61. #SET SEGMENT DIMENSIONS
  62. frameW = 336
  63. frameH = 480
  64.  
  65. for imgR in imgReg:
  66. for sR in scrambleReg:
  67. if imgR["img"] == sR["img"]:
  68. bytes_imagen = base64.b64decode(imgR["data"])
  69. objeto_bytes = BytesIO(bytes_imagen)
  70. imagen = Image.open(objeto_bytes)
  71.  
  72. W, H = imagen.size
  73.  
  74. #TODO: Averiguar como calcular el tamaño del cuadrante de forma automaitca (Depende del tamaño de la imagen original)
  75. #frameW = W // 4
  76. #frameH = H // 4
  77. #print(W)
  78. #print(frameW)
  79.  
  80.  
  81. numberOfWFrames = W // frameW
  82. numberOfHFrames = H // frameH
  83. WpixelExtras = W - (numberOfWFrames * frameW)
  84. HpixelExtras = H - (numberOfHFrames * frameH)
  85.  
  86. sections = []
  87. for j in range(numberOfHFrames):
  88. for i in range(numberOfWFrames):
  89. seccion_imagen = imagen.crop((i*frameW,j*frameH,i*frameW+frameW,j*frameH+frameH))
  90. sections.append(seccion_imagen)
  91.  
  92. count = 0
  93. for j in range(numberOfHFrames):
  94. for i in range(numberOfWFrames):
  95. realSectionHere = int(sR["scramble"][count])
  96. imagen.paste(sections[realSectionHere], (i*frameW,j*frameH))
  97. count += 1
  98.  
  99. imagen.save(imgR["img"]+'.jpg', format='JPEG', quality=100, compress_level=0)
Add Comment
Please, Sign In to add comment