Saya mencari cara cepat untuk mendapatkan tinggi dan lebar gambar dalam piksel. Ini harus menangani setidaknya JPG, PNG dan TIFF, tetapi lebih banyak lebih baik. Saya menekankan dengan cepat karena gambar saya cukup besar (hingga 250 MB) dan butuh waktu sangat lama untuk mendapatkan ukuran dengan ImageMagick identify
karena jelas membaca gambar secara keseluruhan terlebih dahulu.
Lebih disukai, saya mencari cara yang bekerja dengan baik di Ruby, atau bahkan di Rails 3.
Saya tahu hal-hal teori (berbagai format gambar, header dan perbedaannya, dan sebagainya). Memang, saya meminta semacam perpustakaan yang dapat menyelesaikan masalah saya dengan cara yang cukup umum.
Saya baru saja menemukan imageize yang terlihat menjanjikan meskipun perkembangannya sepertinya sudah mati.
Jawaban:
The
file
perintah mencetak dimensi untuk beberapa format gambar (misalnya PNG, GIF, JPEG; versi terbaru juga PPM, WebP), dan tidak hanya membaca header.The
identify
perintah (dari ImageMagick) mencetak banyak informasi gambar untuk berbagai macam gambar. Tampaknya menahan diri untuk membaca bagian header (lihat komentar). Ini juga memiliki output terpadu yangfile
sayangnya kurang.exiv2
memberi Anda dimensi untuk banyak format, termasuk JPEG, TIFF, PNG, GIF, WEBP, meskipun tidak ada header EXIF. Tidak jelas apakah ia membaca seluruh data untuk itu. Lihat halaman manual exiv2 untuk semua format gambar yang didukung.head -n1
akan memberi Anda dimensi untuk PPM, format PGM.Untuk format yang populer di web, keduanya
exiv2
danidentify
akan berfungsi. Bergantung pada kasus penggunaan, Anda mungkin perlu menulis skrip Anda sendiri yang menggabungkan / mengurai keluaran dari beberapa alat.sumber
Saya tidak yakin Anda telah menginstal php, tetapi fungsi PHP ini sangat berguna
sumber
Anda dapat menggunakan fungsi identifikasi ImageMagick . Inilah cara Anda melakukannya di bash (Catatan $ 0 adalah jalur gambar):
Dan ini juga menyembunyikan pesan kesalahan potensial. Implementasi modern
identify
hanya membaca header, bukan seluruh gambar, jadi cepat. Tidak yakin bagaimana perbandingannya dengan metode lain.sumber
read width height < <(identify -format "%w %h" "${1}")
https://joseluisbz.wordpress.com/2013/08/06/obtaining-size-or-dimension-of-images/ (BMP, PNG, GIF, JPG, TIF atau WMF)
Di sini untuk dua format PNG dan JPG.
Kode saya berasal dari kelas yang dirancang untuk saya gunakan, Anda dapat mengedit sesuai kebutuhan Anda.
Silakan periksa fungsi / metode ini menggunakan PHP :
Menggunakan Kode PHP:
Sekarang fungsi / metode ini menggunakan JAVA :
Menggunakan kode Java:
sumber
ref
/out
parameter di Java - apakah itu dianggap praktik terbaik?Ini dimensi piksel yang Anda inginkan (lebar dan tinggi), menurut saya?
Menurut saya, sebagian besar format file memiliki beberapa info header yang menentukan dimensinya, sehingga perangkat lunak yang membaca file tersebut dapat mengetahui berapa banyak ruang yang harus dipesan sebelum mulai membaca file. Beberapa format file tipe "mentah" mungkin hanya berupa aliran byte dengan beberapa byte "akhir baris" di akhir setiap baris horizontal piksel (dalam hal ini perangkat lunak harus membaca baris pertama dan membagi ukuran aliran byte dengan panjang garis untuk mendapatkan ketinggian).
Saya tidak berpikir Anda dapat membuat ini dengan cara "umum", karena Anda perlu memahami format file (atau menggunakan perpustakaan tentunya) untuk mengetahui cara membacanya. Anda mungkin dapat menemukan beberapa kode yang dalam banyak kasus akan memberikan perkiraan kasar tentang dimensi tanpa membaca keseluruhan file, tetapi saya pikir beberapa tipe file mungkin mengharuskan Anda untuk membaca seluruh file untuk memastikan dimensi apa yang sebenarnya dimilikinya. Saya berharap sebagian besar format gambar web centric memiliki header dengan info seperti itu sehingga browser dapat membuat dimensi kotak sebelum seluruh gambar dimuat.
Saya kira perpustakaan yang baik akan memiliki beberapa metode untuk mendapatkan dimensi file yang ditanganinya, dan metode tersebut akan diimplementasikan seefisien mungkin.
Pembaruan : imageinfo sepertinya melakukan apa yang Anda inginkan. (Belum mengujinya)
sumber
Jika Anda memiliki informasi EXIF dalam gambar, Anda cukup membaca header EXIF.
sumber
-ping adalah opsi yang sepertinya telah diperkenalkan untuk tujuan itu.
Namun pada ImageMagick 6.7.7 saya tidak melihat perlambatan bahkan untuk setiap file besar, misalnya:
Dapatkah Anda menghasilkan contoh gambar input yang masih lambat?
sumber
tldr: file "imagename" bisa digunakan
berfungsi dengan webp, semua format jpg (jpeg, jpg200, ..),
Keluaran sampel terlihat seperti
muat keluaran file ke daftar python & gunakan bidang ke-4 dalam daftar.
FYI, memang mengoptimalkan sekitar 18000+ gambar untuk mengurangi lalu lintas jaringan.
sumber