Какое оптимальное соотношение изображений для объединения файлов JPEG для уменьшения места на диске? - PullRequest
1 голос
/ 19 апреля 2019

Я пытаюсь найти оптимальный способ объединения небольших изображений JPEG размером 8 на 8 пикселей в более крупный файл JPEG, который занимает меньше места на диске.

У меня есть изображение, которое я разделил на различные меньшие изображения размером 8 на 8 пикселей, однако я заметил, что общее дисковое пространство, занимаемое папкой, содержащей все эти меньшие изображения, было значительно выше, чем дисковое пространство для исходного изображения , Заметив это, я предположил, что, наоборот, объединение небольших изображений в одно большое изображение может занять меньше места.

Я использую OpenCV в Python, и я заметил, что простое чтение и запись изображения создает новый файл, который занимает больше места, чем оригинал (я тоже не уверен, почему это происходит). Однако, когда я объединил меньшие изображения в вертикальное растяжение, на котором все 8 на 8 пикселей располагаются друг над другом, оно заняло больше места, чем когда я оставил изображение в его исходных размерах. Мне было интересно, есть ли способ определить, как объединить изображения таким образом, чтобы пространство, занимаемое объединенным изображением, было минимальным. Не имеет значения, в каком положении находится каждое из исходных изображений 8 на 8 в объединенном изображении или каковы размеры объединенного изображения.

Вот код для разделения изображения на различные меньшие изображения:

def save(path):
    img = cv2.imread('Images\\' + path)  


    max_ind = 1
    for i in range(0,len(img)-8,8):
        for j in range(0,len(img[0])-8,8):

            sections = img[i:i+8]
            save = []
            for section in sections:
                save.append(section[j:j+8])

            cv2.imwrite("Saves\\" + str(max_ind) + ".jpg",np.array(save))
            max_ind += 1

А вот код, который я использовал для сохранения изображения таким образом, что все его 8 на 8 пикселей накладываются друг на друга:

def save_master(path):
    img = cv2.imread('Images\\' + path)  


    master = []
    for i in range(0,len(img)-8,8):
        for j in range(0,len(img[0])-8,8):
            sections = img[i:i+8]
            save = []
            for section in sections:
                save.append(section[j:j+8])

            master.extend(np.array(save))

    cv2.imwrite("Saves\\" + "master.jpg",np.array(master))
...