ComputersConsumer ElectronicsCell PhonesHome Theater & AudioGraphic Design & Video EditingInternetIndustrial Technology

How to Access Photo Camera and Library in Swift

Updated on August 14, 2017
FV Imagination profile image

iOS and Android Mobile Apps developer. From Italy with Love. Check out my portfolio of apps on my website.

Please remember to test the code of this tutorial on a real device, because the iOS Simulator doesn't handle the camera.

I have made a demo project that looks like this:


Sample XCode project
Sample XCode project

My sample project has 3 buttons in the main controller:

  • Open Camera
  • Open Photo Library
  • Save

Let’s start by adding the two delegates needed to make this tutorial work, you have to place them into your ViewController class:

class ViewController: UIViewController,
UIImagePickerControllerDelegate,
UINavigationControllerDelegate
{


I have added the image picker and navigation controller delegates to our code, they are included into UIKit framework so you don’t have to import any extra file into your swift page.

In my sample project we had to create an image view too in order to use it later:

      @IBOutlet weak var imagePicked: UIImageView!


Check out the following code, it's the magic that opens the camera on your device:

@IBAction func openCameraButton(sender: AnyObject) {
    if UIImagePickerController.isSourceTypeAvailable(.camera) {
        var imagePicker = UIImagePickerController()
        imagePicker.delegate = self
        imagePicker.sourceType = .camera;
        imagePicker.allowsEditing = false
        self.presentViewController(imagePicker, animated: true, completion: nil)
    }
}


What does the code above do? We're going to explain it line by line:

  1. An IBAction instance for the button, created by ctrl+drag from the Open Camera button to our ViewController.swift page
  2. Check if the Camera is available on the device (as a source type)
  3. Here we declare a variable of image picker controller
  4. Set its delegate
  5. Set its source type
  6. Here we tell our image picker to not edit a captured picture, which means that we won’t get the black screen with a square frame right after taking a photo.
  7. Finally we present the camera controller, it will show up from the bottom of the screen, which is the default iOS animation for opening new screens.

Run the project, tap the button and you’ll get something like this:

The device asks to access the camera
The device asks to access the camera
You're ready to take a picture
You're ready to take a picture
After you took a photo, you can see its preview. Here you can accept or reject it.
After you took a photo, you can see its preview. Here you can accept or reject it.


Now, let's see how to make Open Photo Library button work:

@IBAction func openPhotoLibraryButton(sender: AnyObject) {
    if UIImagePickerController.isSourceTypeAvailable(.photoLibrary) {
        var imagePicker = UIImagePickerController()
        imagePicker.delegate = self
        imagePicker.sourceType = .photoLibrary;
        imagePicker.allowsEditing = true
        self.presentViewController(imagePicker, animated: true, completion: nil)
    }
}


Code explanation:

  1. An action for the button, created the same way we did for the previous object
  2. Check if the device is able to access a photo library
  3. Declare another image picker's variable for later use
  4. Set its delegate
  5. Set its source type (the camera roll)
  6. This time we set the property that allows us to edit our picked image as true, which means that we will get a black window with a square frame where we can zoom, move and crop our photo.
  7. Finally we present the photo library controller with a standard animation from the bottom of the screen


Run the project and tap the button, you will get the following results:

Device asks to access the photo library
Device asks to access the photo library
After picking an image, you can crop it or reject it
After picking an image, you can crop it or reject it


We now need to add a delegate to our class, in order to tell our app to get the chosen image and place it into the image view we've placed on the main screen. Please note that the following delegate will be used for both the functions of this template:

func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : AnyObject]) {
    let image = info[UIImagePickerControllerOriginalImage] as! UIImage
    imagePicked.image = image 
    dismiss(animated:true, completion: nil)
}


  1. Our instance of the delegate. One great thing about XCode is that you can start typing "image" and a list of available delegates will show up below the cursor, it helps you pick up the one you need.
  2. Here we set its object as the chosen image from library or camera.
  3. Here we dismiss the controller and get back to our main screen.


We are only missing the Save button method to complete this tutorial:

@IBAction func saveButt(sender: AnyObject) {
    var imageData = UIImageJPEGRepresentation(imagePicked.image, 0.6)
    var compressedJPGImage = UIImage(data: imageData)
    UIImageWriteToSavedPhotosAlbum(compressedJPGImage, nil, nil, nil)
    
    var alert = UIAlertView(title: "Wow",
        message: "Your image has been saved to Photo Library!",
        delegate: nil,
        cancelButtonTitle: "Ok")
    alert.show()
}

Line by line:

  1. IBAction of the button
  2. Here we declare a variable of NSData for our image and compress it to 0.6 quality (you can set this value from 0.0 to 1.0)
  3. Create a new UIImage and pass it the data previously made into it
  4. Simple method to save our picture into camera roll
  5. Here we create an alert and give it a title
  6. a message
  7. no delegate in this case
  8. and a cancel button's title
  9. Tell our UIAlertView to show up


We’re done, you can run the project and play with buttons, after dismissing the image picker controller you will see your chosen image and save it into photo library:

Conclusion

Thanks for reading thi tutorial, I hope you enjoyed it. Don't forget to check out my other articles and my Portfolio of app templates on codecanyon.net!


© 2015 FV iMAGINATION

Comments

Submit a Comment

No comments yet.