Advertisement
Guest User

Untitled

a guest
Apr 25th, 2017
51
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.47 KB | None | 0 0
  1. #!/usr/bin/env python3
  2.  
  3. #### Requirements
  4. #
  5. # - python3 (tested on 3.5)
  6. # - openpyxl
  7. # - Pillow
  8. # - progressbar2
  9. #
  10.  
  11. #### Usage
  12. #
  13. # $ ./excelizer.py image.jpg target.xlsx [--size max_width] [--cell-scale N]
  14. #
  15. # Where cell-scale set cell width as in cell-base*cell-scale (cell-base is different for width and height)
  16. #
  17.  
  18. #### Potential improvements
  19. #
  20. # - named styles?
  21. # - pararell processing?
  22. #
  23.  
  24. from openpyxl import Workbook
  25. from openpyxl.styles import PatternFill
  26. from openpyxl.utils.cell import get_column_letter
  27. from PIL import Image
  28. from argparse import ArgumentParser
  29. from progressbar import ProgressBar
  30.  
  31.  
  32. parser = ArgumentParser()
  33. parser.add_argument('image')
  34. parser.add_argument('target')
  35. parser.add_argument('-s', '--size', default=250, type=int)
  36. parser.add_argument('-c', '--cell-scale', default=2, type=int)
  37. args = parser.parse_args()
  38.  
  39. size = args.size
  40. im = Image.open(args.image)
  41. im.thumbnail((size, size))
  42. w, h = im.size
  43.  
  44. wb = Workbook()
  45. ws = wb.create_sheet("Image", 0)
  46.  
  47. for i in range(0, w):
  48. ws.column_dimensions[get_column_letter(i+1)].width = 2*args.cell_scale
  49.  
  50. for i in range(0, h):
  51. ws.row_dimensions[i+1].height = 8*args.cell_scale
  52.  
  53.  
  54. bar = ProgressBar(max_value=w*h)
  55. for x in range(0, w):
  56. letter = get_column_letter(x+1)
  57.  
  58. for y in range(0, h):
  59. c = im.getpixel((x, y))
  60. color = "FF%.2X%.2X%.2X" % (c[0],c[1],c[2])
  61. coord = "%s%d" % (letter, y+1)
  62. style = PatternFill("solid", fgColor=color, bgColor=color)
  63. ws[coord].fill = style
  64. bar.update(x * h + y+1)
  65.  
  66. wb.save(args.target)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement