Функция imencode сжимает изображение и сохраняет его в буфере памяти, размер которого изменяется в соответствии с результатом.
img.shape возвращает размеры изображения и количество каналов в изображении, в этом В случае, если оба ваших изображения имеют 3 канала, указывающие, что они являются цветными изображениями.
С точки зрения непрофессионалов, сжатие изображения зависит от частоты конкретного цветового компонента в изображении.
Учитывая, что вы кодируя разные изображения, они всегда будут иметь разный выходной размер.
http://www.libpng.org/pub/png/book/chapter09.html - вот ссылка на то, как работает сжатие png.