Curl ile görüntü boyutlarını alın

5 Cevap php

Ben uzak bir görüntünün yükseklik * genişlik istiyorum. O Curl ile yapılır, ve bu yüzden nasıl olursa olabilir mi?

5 Cevap

Bir görüntünün yüksekliği ve genişliği görüntü dosyası içinde nitelikleridir ve onlara erişmek mümkün dosyayı retieve gerekir. Görüntü biçimine bağlı olarak, bu görüntü meta farklı yerde olacak bağlıyor. Sen operasyon performansını etkileyecek olan, aslında tam resim alınırken akılda getimagesize ile bunu, ama taşıyabilir.

Büyük bir görüntünün durumunda, size veri almaya başlamak ve görüntü formatını bildiğiniz gibi görüntüden yeterince alıncaya kadar, yüksekliğe bakmak için sabırsızlanıyorum en kısa sürede, sunucuya görüntü fecthing başlangıç ​​gibi bir şey denemek ve ve transferi genişliği bilgileri ve durdurun. Büyük olasılıkla API fonksiyonları inşa görüntü kütüphaneler ve muhtemelen tam bir görüntü düzgün çalışması için bekliyoruz gibi, bu işi kendiniz yapmanız gerekir.

Şans eseri görüntüleri sunucu kontrol ederseniz, bir resim dosyası tanımlayıcı verilmiş bu sunucu barındırılan küçük bir betik bu görüntü için yükseklik ve genişliğini döndürür yazma daha iyi.

getimagesize() istediğiniz fonksiyonudur.

Bu uzak bir görüntü indirmek ve analiz etmek gerekir.

Düzenleme: Sorunuza daha doğrudan bir cevap olarak, Curl görüntüyü doğrudan analiz edemez, ancak daha sonra bunu analiz etmek GD kütüphanesi kullanımı hangi durumda kesinlikle, sizin için getirebilir. getimagesize () de olsa getiriliyor yapmak için yönetir, böylece denklemin Curl bırakabilirsiniz.

Bu cevap benim önceki yazı üzerine sadece bir yorum olarak kayıp olacağını endişeliydi gibi Umarım bu ayrı yazı garantilidir. Ve neden ayrı bir yazının bu hak, sormak düşünüyorsunuz? Eh, ben bir yanıt bulduk düşünüyorum.

Ben CLI sürümünü ziyade libcurl (seçtiğiniz dilde) kullanıyorum ama ben çalışan bir cevap aldım kadar yeterince etrafında futzed Verilen. Şöyle ki:

curl -r 0-25 --silent http://www.google.com/logos/giroux1.jpg | identify -format "%wx%h" -

Burada yukarıdaki örnekte oluyor CURL ilk 25 dosyanın bayt ve boru yalnızca istemek için-r bayrağını kullanıyor olması bu boyutları ayıklar ve belirtilen formatta bunları yazdıran nerede IDENTIFY denilen imagemagick komuta.

Eğer ziyaret IDENTIFY http://www.imagemagick.org/script/identify.php ile ayıklamak bilgi hakkında daha fazla bilgi için

Biraz daha komut dostu komutu yapmak için hata mesajları (stderr) bastırmak için sonuna "2> / dev / null" eklemek istiyorum:

curl -r 0-25 --silent http://www.google.com/logos/giroux1.jpg | identify -quiet -format "%wx%h" - 2> /dev/null

Boyutlar sıkıca ilk 10-20 bayt bağlı görünmektedir GIF görüntülerin aksine, bir JPEG boyutları veri almak için gereken bayt sabit bir miktar olarak görünmüyor. Biraz daha test büyük görüntülerde için size boyutları veri almak için ilk ~ 10 K kadar istemek gerekebilir ortaya koymuştur. Iyi bir örnek NASA aşağıdaki 4MB görüntü: http://veimages.gsfc.nasa.gov/17921/southern_africa_25jul02_lrg.jpg Ben az 5971 bayttan boyutları (10836 x 9324) kılacak bulundu ama ben her şeyi indirmek zorunda daha iyidir sanırım.

Varlık noktası ... kilometre değişebilir, bu yüzden kendinizi dışarı deneyebilirsiniz.

Bunu da kıvrılma. http://curl.haxx.se/ aktarıyorum

Blockquote curl is a command line tool for transferring files with URL syntax, supporting FTP, FTPS, HTTP, HTTPS, SCP, SFTP, TFTP, TELNET, DICT, LDAP, LDAPS and FILE. curl supports SSL certificates, HTTP POST, HTTP PUT, FTP uploading, HTTP form based upload, proxies, cookies, user+password authentication (Basic, Digest, NTLM, Negotiate, kerberos...), file transfer resume, proxy tunneling and a busload of other useful tricks.

Http başlıklarını ve görüntü türünü tahmin bakmak, ancak görüntüsünün kendisini ihtiyacınız olacak görüntünün boyutunu belirlemek için kullanılabilir kıvırmak.

Siz örneğin kullanabilirsiniz. görüntü da indirildiğinde zaman Python Imaging Library aslında boyut kontrol için.

CURL docs başına:

With HTTP 1.1 byte-ranges were introduced. Using this, a client can request to get only one or more subparts of a specified document. Curl supports this with the -r flag.

Get the first 100 bytes of a document:  
    curl -r 0-99 http://www.get.this/

Get the last 500 bytes of a document:  
    curl -r -500 http://www.get.this/

Eğer CURL yoluyla görüntünün sadece parçaları isteyebilir göz önüne alındığında, might çok iyi yapmanız aradıklarını gerçekleştirmek mümkün. Şimdi anahtar görüntü boyutlarını ayıklamak ve rapor GD gibi bir şey (ya da seçtiğiniz uygulama) için kısmi görüntü geçmek mümkün ediliyor.

Sadece JPEG ile çalışıyorsanız ölçüleri belirtilen işaretleri ile başlığında dosyanın başında saklanır gibi hayatınızı daha kolay olur. , "Getting Image size of JPEG from its binary" başlıklı burada stackoverflow başka bir tartışma bakın.

Biraz daha fazla çalışma ihtiyacı olsa da, böyle bir şey doğru işaretleyici sizi almak olacaktır gibi görünüyor:

curl -r 0-999 --url http://www.google.com/logos/giroux1.jpg | grep -n $'\xc0'

JPEG bilgi için googling zaman ben rastladım bazı diğer referans kaynakları: