Merhabalar,
Daha önce buradan duyurusunu da yaptığım ve üzerinde çalıştığım bir betikte indirilen JPEG görüntülerini animasyonlu bir GIF haline getirmek için ImageMagick paketi içerisindeki convert aracını kullanıyordum. Betiği bitirip Pardus 17.4 üzerinde denediğimde GIF dosyasının animasyonlu bir şekilde oluşmadığını fark ettim. Bunun üzerine sorunun kaynağını araştırmaya başladım ve sürecin sonunda problemin ImageMagick paketinin Türkçe lokalizasyonunda olduğunu keşfettim. Şöyle ki:
Sorun
Terminal üzerinde şöyle bir komut çalıştırdığınızda,
convert resim-1.jpg resim-2.jpg resim-3.jpg -delay 20 -loop 0 deneme.gif
ImageMagick çıktı dosyasının uzantısını anlamak için büyük harfe dönüştürüp, kontrol ediyor büyük ihtimal. Fakat sisteminizde LC_ALL değişkeninin değeri tr_TR.UTF8 ise -ki Pardus’da bu varsayılan olarak böyle geliyor doğal olarak-, o zaman şöyle bir sorun oluşuyor: Bildiğiniz gibi İngilizce’de İ(büyük i) harfi yok fakat Türkçe’de var. Fakat ‘gif’ uzantısı büyük harfe dönüştürülmek istendiğinde, İngilizce’de gif != GİF olduğundan dolayı işlemin sonunda uzantı GiF olarak kalıyor ve ImageMagick bu uzantıyı tanımlamıyor ve gif dosyasını düzgün bir şekilde oluşturamıyor. Eğer yukarıdaki komuta -debug All kısmını eklerseniz kayıtlar arasında şöyle bir hata mesajını göreceksiniz:
2019-01-17T22:57:40+03:00 0:00.160 0.160u 6.9.7 Exception convert-im6.q16[8244]: module.c/OpenModule/1320/Exception
unable to register image format `GiF‘: /usr/lib/x86_64-linux-gnu/ImageMagick-6.9.7/modules-Q16/coders/gif.so: undefined symbol: RegisterGiFImage
Keşfettiğim bu hata ImageMagick tarafından olduğu için kendilerine GitHub üzerinden raporladım. Hatanın olduğunu doğruladılar ve bir sonraki versiyon güncellemesinde düzelteceklerini belirttiler. GitHub issue sayfasına buradan ulaşabilirsiniz.
Geçici Çözüm
ImageMagick geliştiricileri sorunu sağlam bir şekilde çözene kadar, geçici bir çözüm olarak yukarıdaki komutu şu şekilde kullanarak hatadan kurtulabilirsiniz:
LC_ALL=en_US.UTF8 convert resim-1.jpg resim-2.jpg resim-3.jpg -delay 20 -loop 0 deneme.gif
convert komutundan önce yazdığımız kısım sayesinde komple sistemimizin dil ayarlarını değiştirmek yerine sadece o komuta mahsus olacak şekilde bir istisna yapabiliyorsunuz. Bu komuttan sisteminizin dil ayarları etkilenmez.
Güncelleme – 29 Ocak 2019
Bugün itibariyle sorunun çözüldüğü 7.0.8-25 sürümü yayınlandı.
Bu sorunu yaşıyorsanız sisteminizde kurulu olan ImageMagick versiyonunu güncellemeniz sorunu çözecektir. Fakat bir program ya da betik içerisinde kullanıyorsanız, her kullanıcınızda son sürüm olmayacağı için yukarıda önerdiğim çözümü uygulamanız daha iyi olacaktır.
Deney
Hatayı keşfetmek için aşağıdaki C kodlarını deney amacıyla kodladım ve denedim.
Sonuç:
