Saya menguji aplikasi iPhone saya di iPhone iOS 3.1.3. Saya memilih / mengambil gambar menggunakan UIImagePickerController
:
UIImagePickerController *imagePicker = [[UIImagePickerController alloc] init];
[imagePicker setSourceType:UIImagePickerControllerSourceTypeCamera];
[imagePicker setDelegate:self];
[self.navigationController presentModalViewController:imagePicker animated:YES];
[imagePicker release];
- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info {
self.image = [info objectForKey:UIImagePickerControllerOriginalImage];
imageView.image = self.image;
[self.navigationController dismissModalViewControllerAnimated:YES];
submitButton.enabled = YES;
}
Saya kemudian mengirimkannya ke server web saya menggunakan kelas ASI:
ASIFormDataRequest *request = [ASIFormDataRequest requestWithURL:[NSURL URLWithString:@"http://example.com/myscript.php"]];
[request setDelegate:self];
[request setStringEncoding:NSUTF8StringEncoding];
[request setShouldContinueWhenAppEntersBackground:YES];
//other post keys/values
[request setFile:UIImageJPEGRepresentation(self.image, 100.0f) withFileName:[NSString stringWithFormat:@"%d.jpg", [[NSDate date] timeIntervalSinceNow]] andContentType:@"image/jpg" forKey:@"imageFile"];
[request startAsynchronous];
masalahnya: ketika saya mengambil gambar dengan iphone sambil memegangnya landscape, gambar akan diunggah ke server dan itu dilihat seperti yang Anda harapkan. saat mengambil gambar memegang telepon dalam potret, gambar diunggah dan dilihat seperti telah diputar 90 derajat.
aplikasi saya diatur untuk hanya berfungsi dalam mode potret (terbalik dan teratur).
Bagaimana saya bisa membuat gambar selalu menunjukkan orientasi yang benar setelah mengunggah?
gambar tampaknya benar seperti yang ditampilkan dalam UIImageView (langsung setelah mengambil gambar), tetapi melihat di server mengatakan sebaliknya.
Saya menemukan yang lebih sederhana:
BTW: @ kode Anomie tidak
scale
memperhitungkan, jadi tidak akan berfungsi untuk gambar 2x.sumber
self
dengan objek UIImage Anda.Berikut adalah versi Swift dari jawabannya oleh @ an0:
Juga dalam fungsi yang lebih umum:
Versi Swift 3:
sumber
Solusi untuk Swift 3.1 untuk masalah orientasi saat mengambil gambar dari Kamera.
Saya telah memperbarui solusi yang diberikan oleh jake dan Metal Heart
Ekstensi UIImage
Swift 2.0
Penggunaan Ekstensi UIImage ini dalam kode Anda:
biarkan fixOrientationImage = terpilihImage.fixOrientation ()
letakkan ini di metode delegasi pemilih gambar Anda seperti ini
Cepat 3.1
Swift 2.0
sumber
dalam cepat;)
UPDATE SWIFT 3.0: D
sumber
@an0
Solusi versi Swift 4.x / 5.0 :sumber
Saya menggunakan halaman ini ketika merancang aplikasi saya yang mengambil gambar dan saya menemukan bahwa metode berikut ini akan memperbaiki orientasi dan menggunakan lebih sedikit memori dan prosesor daripada jawaban sebelumnya:
Ini pada dasarnya hanya membungkus kembali data gambar aktual dengan orientasi baru. Saya menggunakan kode @ an0 tetapi itu membuat gambar baru dalam memori yang dapat membebani gambar 3264x2448 yang mungkin Anda dapatkan dari kamera.
sumber
Jika Anda mengaktifkan pengeditan, maka gambar yang diedit (tidak seperti aslinya) akan berorientasi seperti yang diharapkan:
Mengaktifkan pengeditan memungkinkan pengguna untuk mengubah ukuran dan memindahkan gambar sebelum mengetuk "Gunakan Foto"
sumber
Ini yang saya temukan untuk memperbaiki masalah orientasi
EDIT:
sumber
Pembaruan untuk Swift 3.1 berdasarkan
Sourabh Sharma
jawaban, dengan kode dibersihkan.Contoh metode delegasi pemetik:
sumber
Inilah solusi yang tidak mengubah ruang warna gambar asli. Jika Anda ingin menormalkan orientasi gambar skala abu-abu, Anda kurang beruntung dengan semua solusi berdasarkan
UIGraphicsBeginImageContextWithOptions
karena itu menciptakan konteks di ruang warna RGB. Sebagai gantinya, Anda harus membuat konteks dengan properti yang sama dengan gambar asli dan menggambar:sumber
Berikut ekstensi UIImage untuk cepat:
Berdasarkan karya MetalHeart2003 sebelumnya ..
sumber
Berikut ini adalah ekstensi UIImage di Swift 2 berdasarkan jawaban yang diterima oleh @Anomie. Menggunakan case switch yang lebih jelas. Ini juga mengambil nilai opsional yang dikembalikan dengan
CGBitmapContextCreateImage()
mempertimbangkan.sumber
Saya pernah mengalami masalah ini dengan gambar yang diambil dari kamera atau disimpan dalam rol kamera yang diambil dari kamera. Gambar yang diunduh di perpustakaan foto dari browser safari tidak berputar saat diunggah.
Saya dapat mengatasi masalah ini dengan menjadikan data gambar sebagai JPEG sebelum mengunggah.
Kami sekarang dapat menggunakan data untuk mengunggah dan gambar tidak akan dirotasi setelah diunggah.
Semoga ini berhasil.
sumber
Saya mencapai ini dengan menulis di bawah beberapa baris kode
sumber
Jika saya mengerti, apa yang ingin Anda lakukan adalah mengabaikan orientasi UIImage? Jika demikian maka Anda bisa melakukan ini: -
atau di Swift: -
Itu memecahkan masalah tanam saya .. Harapan, ini yang Anda cari ..
sumber
Versi Swift 3 berdasarkan pada @ jake1981 yang telah mengambilnya dari @ MetalHeart2003
sumber
sumber
Berikut adalah kode Swift-4.2 untuk memperbaiki secara otomatis orientasi gambar Anda Returns UIImage
sumber
Saya memindahkan ini ke Xamarin:
sumber