AFAIK

SIPS (Scriptable Image Processing System)

Güncelleme:
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.
GÖRSEL
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ı. 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 yol.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 istiyorum.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.jpgBu 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/*.jpgGörüldüğü üzere komut işlemleri hızlı ve sorunsuz bir şekilde tamamlıyor. Peki, sips ile daha neler yapılabilir? Ö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/ya 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.Sips zGö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.pngYukarı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 *.JPGkomutu 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
    <strong>Belirtilen açılarda göndür.</strong>
 
-f horizontal|vertical
  --flip horizontal|vertical
    <strong>Yatay ve dikey döndür.</strong>
 
-c pixelsH pixelsW
  --cropToHeightWidth pixelsH pixelsW
    <strong>Belirtilen ebatlarda kes.</strong>
 
-p pixelsH pixelsW
  --padToHeightWidth pixelsH pixelsW
    <strong>Belirtilen ebatlara uygun olarak pad alanı ekle.</strong>
 
--padColor hexcolor
    <strong>Pad alanı için belirtilen rengi kullan (White=FFFFFF, Red=FF0000, Default=Black=000000)</strong>
 
-z pixelsH pixelsW
  --resampleHeightWidth pixelsH pixelsW
    <strong>Belirtilen ebatlara göre oran gözetilmeksizin işlem yapar.</strong>
 
  --resampleWidth pixelsW
    <strong>Genişlik değerine göre işlem yapar.</strong>
 
  --resampleHeight pixelsH
    <strong>Yükseklik değerine göre işlem yapar.</strong>
 
-Z pixelsWH
  --resampleHeightWidthMax pixelsWH
    <strong>Belirtilen değeri maksimum kabul eder ve bu değere göre işlem yapar.</strong>
Peki, hepsi bu kadar mı? Elbette değil. 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
Ceyhun Enki Aksan

Kullanıcı Davranışları Analizi (User Behavior Analysis) ve Kullanıcı Deneyim Tasarımı (UX Design) üzerine çalışmalar yürütmekte, bu süreçte edindiğim teknik ve pratik bilgileri fayda sağlamak motivasyonuyla (afaik / as far as i know) paylaşmaktayım.

HABERDAR OL

Yeni eklenen projeler, eğitimler, içerikler ve yayınlanan videolar e-posta adresine gelsin.