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 bir kaç 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.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ı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 z

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.

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

One reply on “SIPS (Scriptable Image Processing System)

Leave a Reply