ImageMagick Türkçe dil sorunu ve geçici çözümü

Merhaba arkadaşlar,
Ü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ırdı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: İngilizce’de İ(büyük i) harfi yok fakat Türkçede 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 değiştirebiliyoruz. Bu komuttan sisteminizin dil ayarları etkilenmez.

Deney

Hatayı keşfetmek için aşağıdaki C kodlarını deney amacıyla kodladım ve denedim.

#include <stdio.h>
#include <ctype.h>
#include <locale.h>

int main() {
	setlocale(LC_ALL, "tr_TR.utf8");
	// setlocale(LC_ALL, "en_US.utf8");

	char ext = 'i';

	printf("%c\n", toupper(ext));
}

Sonuç:
letter-example

4 Beğeni

Güncelleme - 29 Ocak 2019

Bugün itibariyle sorunun çözüldüğü 7.0.8-25 sürümü yayınlandı.
Yukarıda bahsedilen sorunu yaşıyorsanız, ImageMagick versiyonunuzu 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.

Bu konu son cevaptan 30 gün sonra otomatik olarak kapatıldı. Yeni cevap girilmesine izin verilmiyor.