Python resim resize?

S.a. arkadaşlar,

Python ile resize işlemini gerçekleştiriyorum, fakat şöyle bir sıkıntım var. Ben resize ettiğim resimlerden birde hareketli gif oluşturuyorum. Yani bir den fazla resmi birleştiriyorum. Her resmin resize değerleri farklı oluyor. Hareketli gifler saçma sapan bir hal alıyor açıkcası. Benim amaçım hepsini tek bir resize göre yapmak ve kaliteyide bozmamak. Bunun için nası bir algoritma izlemem lazım, veya bildiğiniz bir class varmı. İstediğim ölçüye göre resize yapacak fakat resimlerin kalitesi bozulmayacak.

Selam,

GIF’teki "sacma sapan"ligin ne oldugunu aciklamadigin icin nasil cozulecegine dair hic bir fikrimiz yok.

“Hepsini tek bir resize gore yapmak” ne demek onu da anlamadim. Kaliteyi bozmamak gibi bir sans yok, zira GIF coktan yerini APNG’ye birakmasi gereken eski dandik bir format ve 256 rengin ustunu kolay kolay desteklemiyor.

Hocam selamlar,

4 Tane resim düşünün ve hepsinin with height değerleri birbirinden farklı. Bu dört resmi ben with height değerlerine göre resize yapıyorum, daha sonra birleştiriyorum hareketli bir gif yapıyorum. 1. resim atıyorum 700x400 piksek 2 resim 800x500 piksel oluyor. Bu yüzden oynamaya başlayınca gif bozuk oluyor hocam. Bu yüzden tüm resimleri tek bir with height değerine göre resize yapmak istiyorum. Bunu yapıncada resimler çok kötü oluyor. Umarım anlatabildim.

Cok kotuden kastin resimlerin aspect ratio’sunun bozulmasi mi? Kareler dikdortgen oluyor, insanlar sismanliyor veya zayifliyor? Resize’in tanimi bu. Nasil bir sekilde duzgun olmasini istiyorsun?

Soyle dusunelim: Bir tane I harfi imaji, bir tane W harfi imaji, bir tane de - karakteri imaji var. Bu ucunu tek bir resimde nasil birlestirmeyi hayal ediyorsun?


Seam carving veya liquid rescale denilen algoritmayi incelemek isteyebilirsin.

Evet resimlerdeki insanların genellikle boyu uzuyor ve zayıflıyor.

Resimleri aşağıdaki fonksiyonla boyutlandırıyorum

def resimboyutlandir(filename):
    
    image = cv2.imread(filename) 
    #small = cv2.resize(image, (0,0), fx=0.9, fy=0.9) 
    small = cv2.resize(image, (564,752)) 
    #large = cv2.resize(image, (0,0), fx=1.5, fy=1.5)
    #cv2.imshow("small image",small)
    #cv2.imshow("large image",large)
    #To save rescale image
    cv2.imwrite(filename,small)
    #cv2.imwrite('l.jpg',large)
    cv2.waitKey(0)

Resimleri klasöre atıyorum ve klasör içerisinde ne kadar resim varsa hepsini aşağıdaki şekilde gif haline getiriyorum

def gifyap(path,resimadi):
    print(path)
    frames = []
    imgs = glob.glob(path+"*.jpg")
    #print(imgs)
    say = 0
    for i in imgs:
        if say <= 6:
            resimboyutlandir(i)
            #print(i)
            new_frame = Image.open(i)
            frames.append(new_frame)
        say += 1
    # Save into a GIF file that loops forever
    frames[0].save('C:/Users/****/Desktop/***/resimler/'+str(resimadi)+'.gif', format='GIF',
                   append_images=frames[0:],
                   save_all=True,
                   duration=500, loop=0)
    shutil.rmtree(path)

Bu drumu düzeltmenin yolu yoktur. aspect ratio ları farklı olan resimleri, aynı size a getirip aynı netliği elde edemezsin.