Di aplikasi iPhone saya, saya mengambil gambar dengan kamera, lalu saya ingin mengubah ukurannya menjadi 290 * 390 piksel. Saya menggunakan metode ini untuk mengubah ukuran gambar:
UIImage *newImage = [image _imageScaledToSize:CGSizeMake(290, 390)
interpolationQuality:1];
Ini berfungsi dengan baik, tetapi ini adalah fungsi tidak berdokumen, jadi saya tidak dapat menggunakannya lagi dengan iPhone OS4.
Jadi ... apa cara paling sederhana untuk mengubah ukuran UIImage?
Jawaban:
Cara paling sederhana adalah mengatur bingkai Anda
UIImageView
dan mengaturnyacontentMode
ke salah satu opsi pengubahan ukuran.Atau Anda dapat menggunakan metode utilitas ini, jika Anda benar-benar perlu mengubah ukuran gambar:
Contoh penggunaan:
sumber
newImage
akan sudah autoreleased sudah, dan harus sampai metode yang memanggil ini untuk mempertahankannya atau tidak. Pendekatan ini hanya meminta bug memori karenainit
bukan bagian dari nama metode. Saya akan mengharapkan metode bernama ini untuk mengembalikan objek autoreleased.UIGraphicsBeginImageContextWithOptions
Inilah versi Swift dari jawaban Paul Lynch
Dan sebagai perpanjangan:
sumber
Solusi Proper Swift 3.0 untuk iOS 10+ : Menggunakan
ImageRenderer
dan menutup sintaksis:Dan inilah versi Objective-C:
sumber
Trevor Howard memiliki beberapa kategori UIImage yang menangani pengubahan ukuran dengan cukup baik. Jika tidak ada yang lain, Anda dapat menggunakan kode sebagai contoh.
Catatan: Pada iOS 5.1, jawaban ini mungkin tidak valid. Lihat komentar di bawah.
sumber
Versi yang lebih ringkas untuk Swift 4 dan iOS 10+:
Pemakaian:
sumber
Saya juga melihat ini dilakukan (yang saya gunakan
UIButtons
untuk Normal dan Selected state karena tombol tidakresize
cocok). Penghargaan diberikan kepada siapa pun penulis aslinya.Pertama buat file .h dan .m yang kosong dipanggil
UIImageResizing.h
danUIImageResizing.m
Sertakan file .h itu dalam file .m apa pun yang akan Anda gunakan fungsinya lalu panggil seperti ini:
sumber
Peningkatan pada kode Paul ini akan memberi Anda gambar beresolusi tinggi yang tajam pada iPhone dengan tampilan retina. Kalau tidak, saat menurunkannya buram.
sumber
UIGraphicsBeginImageContextWithOptions
akan secara otomatis menggunakan skala layar utama (pada iOS 3.2).Ini cara sederhana:
gambar resized adalah gambar baru.
sumber
Solusi Swift untuk Stretch Fill, Fill Aspect, dan Aspect Fit
dan untuk menggunakan Anda dapat melakukan hal berikut:
Terima kasih kepada abdullahselek untuk solusi aslinya.
sumber
Berikut ini adalah modifikasi dari kategori yang ditulis oleh iWasRobbed di atas. Itu menjaga rasio aspek gambar asli daripada mendistorsi itu.
sumber
Jika Anda hanya ingin gambar lebih kecil dan tidak peduli tentang ukuran pastinya:
Mengatur skala untuk
0.25f
akan memberi Anda gambar 816 x 612 dari kamera 8MP.Berikut adalah kategori UIImage + Scale untuk mereka yang membutuhkannya.
sumber
Kenapa begitu rumit? Saya pikir menggunakan sistem API dapat mencapai hasil yang sama:
Satu-satunya gotcha adalah Anda harus melewati kebalikan dari rasio target sebagai argumen kedua, karena menurut dokumen parameter kedua menentukan rasio gambar asli dibandingkan dengan yang skala baru.
sumber
Ini adalah ekstensi UIImage yang kompatibel dengan Swift 3 dan Swift 4 yang mengubah skala gambar ke ukuran tertentu dengan rasio aspek
Contoh penggunaan
sumber
scaledImage(with size:)
atauscaledWithSize(_:)
. JugaUIGraphicsGetImageFromCurrentImageContext
tidak dapat benar-benar kembalinil
, oleh karena itu!
akan berfungsi juga. Anda juga dapat menyederhanakan pembuatan rectCGRect(origin: .zero, size: size)
.Saya menemukan kategori untuk UIImage dalam contoh Apple sendiri yang melakukan trik yang sama. Berikut tautannya: https://developer.apple.com/library/ios/samplecode/sc2273/Listings/AirDropSample_UIImage_Resize_m.html .
Anda hanya perlu mengubah panggilan:
di
imageWithImage:scaledToSize:inRect:
dengan:Untuk mempertimbangkan saluran alfa dalam gambar.
sumber
sumber
Untuk rekan Xamaria saya, berikut adalah versi Xamarin.iOS C # dari jawaban @Paul Lynch.
sumber
Jika Anda ingin membuat thumbnail UIImage (dengan pengubahan ukuran proporsional atau mungkin beberapa pemangkasan), lihat UIImage + kategori Resize yang memungkinkan Anda menggunakan sintaks ringkas, seperti ImageMagick:
sumber
[cf Chris] Untuk mengubah ukuran ke ukuran yang diinginkan:
atau, ekuivalen, gantikan
CGImageGetWidth(...)/DESIREDWIDTH
sumber
Rogerio Chaves menjawab sebagai perpanjangan cepat
Dan juga bonus
sumber
Swift 3.0 dengan opsi failafe (mengembalikan gambar asli jika terjadi kesalahan):
sumber
(Swift 4 kompatibel) solusi iOS 10+ dan iOS <10 (menggunakan
UIGraphicsImageRenderer
jika memungkinkan,UIGraphicsGetImageFromCurrentImageContext
jika tidak)sumber
Pendekatan efektif tanpa peregangan gambar Swift 4
// Metode panggilan
sumber
Jawaban @Paul Lynch bagus, tetapi itu akan mengubah rasio gambar. jika Anda tidak ingin mengubah rasio gambar, dan masih menginginkan gambar baru cocok untuk ukuran baru, coba ini.
sumber
gunakan ekstensi ini
sumber
Swift 2.0:
sumber
Di sini kode Swift saya yang agak verbose
sumber
guard
) padaaspectRatioAwareSize
fungsi sedemikian rupa sehingga tidak akan membagi pembagian dengan pengecualian nol jika parameter input untuk imageSize atau boxSize adalahCGSize.zero
Swift 4 menjawab:
sumber
The scale factor to apply to the bitmap. If you specify a value of 0.0, the scale factor is set to the scale factor of the device’s main screen.
Saya telah menemukan bahwa sulit untuk menemukan jawaban yang dapat Anda gunakan di luar kotak di proyek Swift 3 Anda . Masalah utama dari jawaban lain bahwa mereka tidak menghormati saluran alpha gambar. Berikut adalah teknik yang saya gunakan dalam proyek saya.
Contoh penggunaan:
Kode ini adalah penulisan ulang ekstensi Apple dengan dukungan tambahan untuk gambar dengan dan tanpa saluran alpha.
Sebagai bacaan lebih lanjut saya sarankan memeriksa artikel ini untuk berbagai teknik mengubah ukuran gambar. Pendekatan saat ini menawarkan kinerja yang layak, ia mengoperasikan API tingkat tinggi dan mudah dimengerti. Saya sarankan tetap melakukannya kecuali jika Anda menemukan bahwa mengubah ukuran gambar adalah hambatan dalam kinerja Anda.
sumber
Gunakan ekstensi ini, jika Anda perlu mengubah ukuran lebar / tinggi hanya dengan rasio aspek.
sumber