SIPS (Scriptable Image Processing System)
Gezilerde fotoğraf çekip etkinlik sürecini kayıt altına almak, beğenilerimi ve şikayetlerimi kayıt altına alınmış bu anlar üzerinden yorumlamak istediğimde yaşadığım problemlerden biri çektiğim fotoğrafların web ortamında paylaşılabilecek niteliklerde düzenlenmesiydi.
Çok uzun bir süre bir çok alternatifi denemiş ancak bir türlü “işte bu” diyebileceğim bir çözüm yöntemine ulaşamamıştım. Görsellerin genişlik, kalite ve isimleriyle ilgili basit bir işlem için bir program kullanma düşüncesi bana oldukça saçma geliyordu. Son olarak kullandığım ve görece oldukça pratik olduğunu söyleyebileceğim Preview macOS ortamında kısmen kolaylık sağlasa da imaj sayısına bağlı olarak performansında düşüş yaşanıyor olması nedeniyle tekrar çözüm arayışı içerisine girmeme neden oldu. İşte tam bu noktada SIPS ile karşılaştım. Scriptable Image Processing System olarak ifade edilen ve Terminal üzerinden yürütülen sips birkaç satır kodla tam da ihtiyacım olan pratikliğe kavuşmamı sağladı1. Nasıl mı?
Scriptable Image Processing System
Photoshop, Pixelmator, Preview başta olmak üzere bir çok uygulama denemiş biri olarak söyleyebileceğim şu ki, SIPS oldukça basit ve etkili bir işlem için tam ihtiyacınız olan, en pratik yollardan biri, belkide tek yol1. Görseller için sorgulama ve modifiye etme özelliklerini ve ColorSync ICC renk profilini kullanan ve “Image Events” olarak da AppleScript halinde kullanılabilen sips (scriptable image processing system) imajların ebatlandırılmasından kalitelerinin düzenlenmesine bir çok işlemi hızlıca gerçekleştirebilmenizi sağlıyor. Ancak, burada bir uyarı eklemem gerekiyor. sips ile gerçekleştirdiğiniz işlemleri geri alabilmek gibi bir şansınız yok. Bu nedenle yazdığınız komutların sonuçlarını bilerek ve mümkünse üzerlerinde işlem yürüteceğiniz görselleri yedekleyerek işlem yürütmeniz yararınıza olacaktır.
SIPS ile tanışmamı sağlayan durum üzerinden konuyu detaylandırmak istiyorum1. Elimizde ebatlandırılması ve kalitelerinin de bir miktar düşürülmesi gereken 600 civarında fotoğraf var diyelim. Yaşadığımız problem de şu olsun; Preview ile açmaya, düzenlemeye ve kaydetmeye çalıştığınızda hem işlemler hızlı bir şekilde gerçekleşmiyor hem de uygulama bazı görselleri düzenlemeden bırakıyor. Bu soruna çözüm olarak cd
ile klasör içerisine erişip kullanacağımız komut şu: sips -Z 1024 gorsel.jpg
Bu kadar basit. Elbette işlemlerin yapılacağı klasörü de belirtmemiz gerekiyor. Yani çalıştıracağımız komut şu hale geliyor. sips -Z 1024 /Users/user/Desktop/folder/*.jpg
.
Görüldüğü üzere komut işlemleri hızlı ve sorunsuz bir şekilde tamamlıyor. Peki, sips
ile daha neler yapılabilir2 3?
Öncelikle sips –help ile biraz daha bilgi edinelim.
Usages:
sips [-h, --help]
sips [-H, --helpProperties]
sips [image-query-functions] imagefile ...
sips [profile-query-functions] profile ...
sips [image modification functions] imagefile ...
[--out result-file-or-dir]
sips [profile modification functions] profile ...
[--out result-file-or-dir]
Profile query functions:
-g, --getProperty key
-X, --extractTag tag tagFile
-v, --verify
Image query functions:
-g, --getProperty key
-x, --extractProfile profile
Profile modification functions:
-s, --setProperty key value
-d, --deleteProperty key
--deleteTag tag
--copyTag srcTag dstTag
--loadTag tag tagFile
--repair
Image modification functions:
-s, --setProperty key value
-d, --deleteProperty key
-e, --embedProfile profile
-E, --embedProfileIfNone profile
-m, --matchTo profile
-M, --matchToWithIntent profile intent
--deleteColorManagementProperties
-r, --rotate degreesCW
-f, --flip horizontal|vertical
-c, --cropToHeightWidth pixelsH pixelsW
-p, --padToHeightWidth pixelsH pixelsW
--padColor hexcolor
-z, --resampleHeightWidth pixelsH pixelsW
--resampleWidth pixelsW
--resampleHeight pixelsH
-Z, --resampleHeightWidthMax pixelsWH
-i, --addIcon
O halde yukarıda imajları düzenlemek için kullandığımız komutla birlikte SIPS fonksiyonlarının ne işe yaradıklarına bir bakalım. -z
ile görseller ebatları her ne olursa olsun görselleri belirttiğiniz yükseklik ve genişlik değerinde düzenlenir. -Z
görselin maksimum maksimum değerlerde düzenlenmesini sağlar. Eğer görseller genişlik ve/veya yükseklik olarak belirtilen değerden küçükse görsel oranını koruyarak mümkün olan en yakın değerde işlem yürütür. -Z
kullanımında, hem genişlik hem de yüksekliğin orantılı düzenleneceği durumlarda ilgili parametreler işelmlerinizi oldukça pratik hale getirebilir; –resampleWidth
, –resampleHeight
SIPS Örnekleri
Ön bir açıklama olarak, klasör içerisinde cd ile giriş yapın ya da klasörü Terminal’e sürükleyerek dosya yolu alın, fark etmez. Ancak, işlem yaptığınız klasörden emin olmalı ve mutlaka görsellerin yedeklerini alarak çalışmalısınız. Bir diğer husus ise özellikle dosya formatını belirtmek ya da tüm görsel dosyalarda işlem yapmak için *
(jpeg | tiff | png | gif | jp2 | pict | bmp | qtif | psd | sgi | tga) veya *.jpg
(sadece jpg formatlı olanlar), *.png
(sadece png formatlı olanlar) gibi kullanımlarda dikkatli olmanız. sips -z 768 1024 gorsel.png
Farklı ebatlardaki görsellerinizi 768px genişliğinde 1024px yüksekliğinde, oran gözetilmeksizin düzenler. Aşağıdaki referans görselde işlem sonrası imajda meydana gelen değişimi görebilirsiniz. Değişim oranlarına baktığınızda genişlik değerinin yükseklikle oransız şekilde düzenlenmiş olduğunu görebilirsiniz.
Görselin işlemden önceki hali 5472px genişlik, 3648px yükseklik değerlerine sahip, 1 Mb boyutundayken yukarıdaki komut sonrasında 768px genişlik, 1024px yükseklik değerlerinde ve 62 Kb boyutunda olmuştur. sips -Z 768 1024 gorsel.png
, -Z
fonksiyonu içerisinde 768 ve 1024 maksimum genişlik ve yükseklik değerlerini belirtmektedir. Bu komut ile 5472px genişliğinde, 3648px yüksekliğindeki imaj orantılı bir şekilde 768px genişliğinde, 512px yüksekliğinde olacak şekilde düzenlendi. Komut içerisinde tanımlanan 1024 oranın korunması esnasında imajın orjinal boyutlarında görmezden gelinmiştir. Eğer dikey bir görsel üzerinde işlem yapıyor olsaydık oran içerisinde genişlik değeri görmezden gelinebilirdi. Dosyanın işlem sonrası boyutu ise 42 Kb. sips -Z 768 gorsel.png
Yukarıdaki fonksiyonu bir önceki fonksiyondan yükseklik değerini çıkararak tekrarladığımızda aldığımız sonuç yine aynı olacaktır. sips --resampleHeight 1024 gorsel.png
-resampleHeight
ile görsellerinizin yükseklik değeri ne olursa olsun işlem sonrasında 1024px olacak şekilde orantılı olarak düzenlenir. Örneğin, elinizde farklı ebatlarda (1024px değerinden küçük ya da büyük) bir çok imaj olsun ve siz tüm fotoğrafların yükseklik değerinin aynı olmasını istiyorsunuz. O halde yukarıdaki kod tam aradığınız çözüm. Unutmayın, küçük ebatlı görsellerin yüksek bir ebatta kaydedilmesi esnasında kalite kaybı söz konusu olacaktır. sips --resampleWidth 1024 gorsel.png
-resamplewidth
ile yapacağınız genişlik düzenleme işlemlerinde de -resampleHeight
ile aynı durumlar geçerli. Bir örnek daha yapalım o halde. Elimizdeki bir klasör dolusu fotoğrafı önce 1024×768px ebatlarında düzenleyelim. sips -z 768 1024 *.JPG
komutu sonrasında tam olarak belirttiğimiz ebatlarda fotoğraflarımız oran gözetilmeksizin düzenlenmiş oldu. Peki, örneği biraz daha genişletmek istersek? Mesela genişlikleri 500px ile 1500px aralığında olan bir çok görselin hem 90 derece döndürülmesini hem de genişliklerinin 768px olmasını istiyorsak ne yapmalıyız? sips -r 90 --resampleHeight 768 ./test/*
Benim sıklıkla kullandığım fonksiyonlar şöyle:
-r degreesCW
--rotate degreesCW
Belirtilen açılarda göndür.
-f horizontal|vertical
--flip horizontal|vertical
Yatay ve dikey döndür.
-c pixelsH pixelsW
--cropToHeightWidth pixelsH pixelsW
Belirtilen ebatlarda kes.
-p pixelsH pixelsW
--padToHeightWidth pixelsH pixelsW
Belirtilen ebatlara uygun olarak pad alanı ekle.
--padColor hexcolor
Pad alanı için belirtilen rengi kullan (White=FFFFFF, Red=FF0000, Default=Black=000000)
-z pixelsH pixelsW
--resampleHeightWidth pixelsH pixelsW
Belirtilen ebatlara göre oran gözetilmeksizin işlem yapar.
--resampleWidth pixelsW
Genişlik değerine göre işlem yapar.
--resampleHeight pixelsH
Yükseklik değerine göre işlem yapar.
-Z pixelsWH
--resampleHeightWidthMax pixelsWH
Belirtilen değeri maksimum kabul eder ve bu değere göre işlem yapar.
Örnek Uygulamalar
Aşağıdaki komut ile bulunduğunuz klasördeki jpg uzantılı görsellerin %10 kalite kaybıyla (formatOptions 90) png kopyalarını oluşturabilirsiniz. Bu komutu RAW formatlı görüntüleri diğer bir formata çevirmek için de kullanabilirsiniz.
for i in *.jpg;
do
sips -s format png $i --setProperty formatOptions 90 --out "${i%.*}.png";
done
Elbette bu örnekler dışında da pek çok işlem gerçekleştirilebilir4 5.