Apakah ada cara yang jelas untuk melakukan ini yang saya lewatkan? Saya hanya mencoba membuat thumbnail.
python
image
python-imaging-library
thumbnails
tempat sabtu
sumber
sumber
Jawaban:
Tentukan ukuran maksimum. Kemudian, hitung rasio ukuran dengan mengambil
min(maxwidth/width, maxheight/height)
.Ukuran yang tepat adalah
oldsize*ratio
.Tentu saja ada juga metode perpustakaan untuk melakukan ini: metode
Image.thumbnail
.Di bawah ini adalah contoh (diedit) dari dokumentasi PIL .
sumber
s= img.size(); ratio = MAXWIDTH/s[0]; newimg = img.resize((s[0]*ratio, s[1]*ratio), Image.ANTIALIAS)
? (Itu untuk pembagian floating point :)ANTIALIAS
tidak lagi disukai bagi pengguna garpu Bantal PIL yang populer. pillow.readthedocs.org/en/3.0.x/releasenotes/…thumbnail
hanya berfungsi jika gambar yang dihasilkan lebih kecil dari yang asli. Karena itu saya akan menebak bahwa menggunakanresize
adalah cara yang lebih baik.Script ini akan mengubah ukuran gambar (somepic.jpg) menggunakan PIL (Python Imaging Library) dengan lebar 300 piksel dan tinggi sebanding dengan lebar baru. Ini dilakukan dengan menentukan berapa persentase 300 piksel dari lebar asli (img.size [0]) dan kemudian mengalikan tinggi asli (img.size [1]) dengan persentase itu. Ubah "basewidth" ke nomor lain untuk mengubah lebar default gambar Anda.
sumber
sompic.jpg
. Mengapa ini terjadi? Saya menggunakan Python 3.x.jpeg
, gunakanimg.save('sompic.jpg', 'JPEG')
.PIL.Image.ANTIALIAS
pilihan untukresize
, sebenarnyaPIL.Image.LANCZOS
, walaupun keduanya1
bernilai, lihat pillow.readthedocs.io/en/3.1.x/reference/…Saya juga merekomendasikan menggunakan metode thumbnail PIL, karena menghapus semua kerepotan rasio dari Anda.
Namun ada satu petunjuk penting: Ganti
dengan
secara default, PIL menggunakan filter Image.NEAREST untuk mengubah ukuran yang menghasilkan kinerja yang baik, tetapi kualitasnya buruk.
sumber
Image.thumbnail
.Berbasis di @tomvon, saya selesai menggunakan yang berikut (pilih kasing Anda):
a) Mengubah ukuran ketinggian ( Saya tahu lebar baru, jadi saya perlu ketinggian baru )
b) Mengubah ukuran lebar ( Saya tahu ketinggian baru, jadi saya perlu lebar baru )
Maka cukup:
sumber
resize
panggilan, Anda menggunakannew_width
untuk tinggi dan lebar?PIL sudah memiliki opsi untuk memotong gambar
sumber
sumber
Jika Anda mencoba mempertahankan rasio aspek yang sama, bukankah Anda akan mengubah ukuran berdasarkan persentase dari ukuran aslinya?
Misalnya, setengah dari ukuran aslinya
sumber
Saya menggunakan perpustakaan ini:
sumber
Jika Anda tidak ingin / tidak perlu membuka gambar dengan Bantal, gunakan ini:
sumber
Hanya memperbarui pertanyaan ini dengan pembungkus yang lebih modern Perpustakaan ini membungkus Bantal (garpu PIL) https://pypi.org/project/python-resize-image/
Mengizinkan Anda melakukan sesuatu seperti ini: -
Tumpukan lebih banyak contoh di tautan di atas.
sumber
Saya mencoba mengubah ukuran beberapa gambar untuk video tayangan slide dan karena itu, saya ingin tidak hanya satu dimensi maks, tetapi lebar maks dan tinggi maks (ukuran bingkai video).
Dan selalu ada kemungkinan video potret ...
The
Image.thumbnail
Metode menjanjikan, tapi aku tidak bisa membuatnya kelas atas gambar yang lebih kecil.Jadi setelah saya tidak dapat menemukan cara yang jelas untuk melakukan itu di sini (atau di beberapa tempat lain), saya menulis fungsi ini dan meletakkannya di sini untuk yang akan datang:
sumber
Metode sederhana untuk menjaga rasio terbatas dan memberikan lebar / tinggi maks. Bukan yang tercantik tetapi menyelesaikan pekerjaan dan mudah dimengerti:
Berikut ini adalah skrip python yang menggunakan fungsi ini untuk menjalankan mengubah ukuran gambar batch.
sumber
Telah memperbarui jawaban di atas oleh "tomvon"
sumber
Contoh jelek saya.
Fungsi mendapatkan file seperti: "pic [0-9a-z]. [Ekstensi]", ubah ukurannya menjadi 120x120, pindahkan bagian ke tengah dan simpan ke "ico [0-9a-z]. [Ekstensi]", bekerja dengan potret dan lansekap:
sumber
Saya mengganti gambarnya sedemikian rupa dan itu bekerja dengan sangat baik
sumber
Saya juga akan menambahkan versi ukuran yang menjaga rasio aspek tetap. Dalam hal ini, itu akan menyesuaikan ketinggian agar sesuai dengan lebar gambar baru, berdasarkan rasio aspek awal, asp_rat , yang float (!). Tetapi, untuk menyesuaikan lebar dengan tinggi, Anda hanya perlu mengomentari satu baris dan menghapus komentar yang lain di loop lain . Anda akan lihat, di mana.
Anda tidak memerlukan titik koma (;), saya menyimpannya hanya untuk mengingatkan diri saya pada sintaks bahasa yang saya gunakan lebih sering.
Dan, itu selesai. Saya mencoba mendokumentasikannya sebanyak mungkin, jadi jelas.
Saya harap ini bisa membantu seseorang di luar sana!
sumber
Buka file gambar Anda
Gunakan metode PIL Image.resize (size, resample = 0) , di mana Anda mengganti (lebar, tinggi) gambar Anda dengan ukuran 2-tuple.
Ini akan menampilkan gambar Anda pada ukuran asli:
Ini akan menampilkan gambar Anda dengan ukuran 1/2:
Ini akan menampilkan gambar Anda dengan ukuran 1/3:
Ini akan menampilkan gambar Anda dengan ukuran 1/4:
dll
sumber
display()
dan di mana lokasinya?sumber
Anda dapat mengubah ukuran gambar dengan kode di bawah ini:
sumber