Last active
July 25, 2022 19:03
-
-
Save MuhammadSawalhy/fb21fcb8275c2042e6cf22307e06bc8d to your computer and use it in GitHub Desktop.
Revisions
-
MuhammadSawalhy revised this gist
Jul 25, 2022 . 2 changed files with 30 additions and 20 deletions.There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode charactersOriginal file line number Diff line number Diff line change @@ -1,3 +1,5 @@ ## Plan A 1. list images with command: `pdfimages -j -png file.pdf img` 2. run **list-code-images.py** to find the dark theme code images 3. invert these image to make them light theme code: @@ -6,10 +8,17 @@ convert $f -channel RGB -negate inversed/$f done ``` 4. find a way to replace images in a pdf with code (but I gave up here) ## Plan B I end up using PyMuPDF to invert dark theme code images and save them in the same position using **replace-images.py**. You will need to install these packages: ```bash pip install fitz PyMuPDF ``` ------------ This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode charactersOriginal file line number Diff line number Diff line change @@ -1,20 +1,21 @@ import fitz from os import listdir # This creates the Document object doc for file in listdir("./files"): doc: fitz.Document = fitz.open(f"./files/{file}") for page in doc: for img in page.get_images(full=True): xref = img[0] pix = fitz.Pixmap(doc, xref) bg_color = pix.pixel(pix.width - 1, int(pix.height / 2)) if bg_color == (12,12,12): pix.invert_irect() rect = page.get_image_bbox(img) page.insert_image(rect, pixmap=pix, keep_proportion=False) # doc.save(filename=r"file.new.pdf", clean=True) # doc.save(filename=r"file.new.pdf", clean=True, garbage=4) # without deflate_images=1 the file size is 112MB, but now it is just 12MB doc.save(filename=f"./processed-files/{file}", clean=True, deflate=4, deflate_images=1, deflate_fonts=1) doc.close() -
MuhammadSawalhy revised this gist
Jul 25, 2022 . No changes.There are no files selected for viewing
-
MuhammadSawalhy revised this gist
Mar 29, 2022 . 2 changed files with 8 additions and 2 deletions.There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode charactersOriginal file line number Diff line number Diff line change @@ -8,4 +8,11 @@ ``` 4. find a way to replace images in a pdf with code, but at the end I end up using PyMuPDF to invert dark theme code images and save them in the same position using **replace-images.py** ------------  Alhamdulillah, all images replaced. This is an illusion of replacement, because the new images are placed in top of the old images. I think there exists some possible ways to really replace using [Document.update_object](https://pymupdf.readthedocs.io/en/latest/document.html#Document.update_object) or [Document.update_stream](https://pymupdf.readthedocs.io/en/latest/document.html#Document.update_stream) provided by PyMuPDF package. This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode charactersOriginal file line number Diff line number Diff line change @@ -1,4 +1,3 @@ import fitz from rich import inspect # This creates the Document object doc -
MuhammadSawalhy revised this gist
Mar 29, 2022 . 3 changed files with 18 additions and 5 deletions.There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode charactersOriginal file line number Diff line number Diff line change @@ -8,4 +8,4 @@ x = math.floor(im.size[0]/2) px = im.getpixel((x,-1)) if px == (12,12,12): print(img) This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode charactersOriginal file line number Diff line number Diff line change @@ -0,0 +1,11 @@ 1. list images with command: `pdfimages -j -png file.pdf img` 2. run **list-code-images.py** to find the dark theme code images 3. invert these image to make them light theme code: ```bash for f in `cat file.code-images.txt`; do convert $f -channel RGB -negate inversed/$f done ``` 4. find a way to replace images in a pdf with code, but at the end I end up using PyMuPDF to invert dark theme code images and save them in the same position using **replace-images.py** This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode charactersOriginal file line number Diff line number Diff line change @@ -1,19 +1,21 @@ import fitz from rich import inspect # This creates the Document object doc doc: fitz.Document = fitz.open("file.pdf") for page in doc: for img in page.get_images(): xref = img[-2] xref_number = img[0] pix = fitz.Pixmap(doc, xref) bg_color = pix.pixel(pix.width - 1, int(pix.height / 2)) if bg_color == (12,12,12): pix.invert_irect() rect = page.get_image_bbox(xref) page.insert_image(rect, pixmap=pix, keep_proportion=False) # doc.save(filename=r"file.new.pdf", clean=True) # doc.save(filename=r"file.new.pdf", clean=True, garbage=4) # without deflate_images=1 the file size is 112MB, but now it is just 12MB doc.save(filename=r"file.new.pdf", clean=True, deflate=4, deflate_images=1, deflate_fonts=1) doc.close() -
MuhammadSawalhy revised this gist
Mar 29, 2022 . 1 changed file with 3 additions and 1 deletion.There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode charactersOriginal file line number Diff line number Diff line change @@ -12,6 +12,8 @@ rect = page.get_image_bbox(img[-2]) page.insert_image(rect, pixmap=pix, keep_proportion=False) # doc.save(filename=r"file.new.pdf", clean=True) # doc.save(filename=r"file.new.pdf", clean=True, garbage=4) doc.save(filename=r"file.new.pdf", clean=True, deflate=4, deflate_images=1, deflate_fonts=1) doc.close() -
MuhammadSawalhy created this gist
Mar 29, 2022 .There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode charactersOriginal file line number Diff line number Diff line change @@ -0,0 +1,11 @@ import math import glob from PIL import Image for img in glob.glob("images/*.png"): # for img in ["imageroot-014.png"]: with Image.open(img) as im: x = math.floor(im.size[0]/2) px = im.getpixel((x,-1)) if px == (12,12,12): print(img) This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode charactersOriginal file line number Diff line number Diff line change @@ -0,0 +1,17 @@ import fitz from rich import inspect # This creates the Document object doc doc: fitz.Document = fitz.open("file.pdf") for page in doc: for img in page.get_images(): xref = img[0] pix = fitz.Pixmap(doc, xref) bg_color = pix.pixel(pix.width - 1, int(pix.height / 2)) if bg_color == (12,12,12): pix.invert_irect() rect = page.get_image_bbox(img[-2]) page.insert_image(rect, pixmap=pix, keep_proportion=False) doc.save(filename=r"file.new.pdf") doc.close()