Jak połączyć dwa interfejsy?

Próbuję połączyć dwa różne obrazy i utworzyć nowy. To jest sposób, w jaki chciałbym to zrobić: Mam takie zdjęcie (A): polaroid

Jest to obraz PNG i chciałbym połączyć ten z innym obrazem (B), który wziąłem z telefonu, aby stworzyć coś takiego: Polaroid

Potrzebuję funkcji, która połączy A Z B tworząc C. rozmiar musi pozostać z obrazu A, a obraz B powinien automatycznie dostosować rozmiar, aby pasował do Polaroida (A). Czy możliwe jest zrobić to? Dziękujemy za pomoc!

UPDATE Tylko jedno, obraz (a) jest kwadratem, a obraz, który zrobiłem, to 16: 9, Jak mogę to naprawić?? Jeśli użyję twojej funkcji obraz (B), który zrobiłem, stał się rozciągnięty!

Author: Luca Alberto, 2015-08-14

6 answers

Mam nadzieję, że to ci pomoże.]}

var bottomImage = UIImage(named: "bottom.png")
var topImage = UIImage(named: "top.png")

var size = CGSize(width: 300, height: 300)
UIGraphicsBeginImageContext(size)

let areaSize = CGRect(x: 0, y: 0, width: size.width, height: size.height)
bottomImage!.draw(in: areaSize)

topImage!.draw(in: areaSize, blendMode: .normal, alpha: 0.8)

var newImage:UIImage = UIGraphicsGetImageFromCurrentImageContext()!
UIGraphicsEndImageContext()

Wszystkiego Najlepszego:)

 61
Author: Pallavi Konda,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-08-13 19:52:03

W ten sposób obraz nakładki będzie znacznie czystszy

class func mergeImages(imageView: UIImageView) -> UIImage {
 UIGraphicsBeginImageContextWithOptions(imageView.frame.size, false, 0.0) 
 imageView.superview!.layer.renderInContext(UIGraphicsGetCurrentContext()!)
 let image = UIGraphicsGetImageFromCurrentImageContext()
 UIGraphicsEndImageContext()

 return image 
}

Tutaj wpisz opis obrazka

 13
Author: Svitlana,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-04-28 17:45:21

Swift 4 UIImage Rozszerzenie umożliwiające łatwe scalanie / nakładanie obrazów.

extension UIImage { 

  func overlayWith(image: UIImage, posX: CGFloat, posY: CGFloat) -> UIImage {
    let newWidth = size.width < posX + image.size.width ? posX + image.size.width : size.width
    let newHeight = size.height < posY + image.size.height ? posY + image.size.height : size.height
    let newSize = CGSize(width: newWidth, height: newHeight)

    UIGraphicsBeginImageContextWithOptions(newSize, false, 0.0)
    draw(in: CGRect(origin: CGPoint.zero, size: size))
    image.draw(in: CGRect(origin: CGPoint(x: posX, y: posY), size: image.size))
    let newImage = UIGraphicsGetImageFromCurrentImageContext()!
    UIGraphicsEndImageContext()

    return newImage
  }

}
 6
Author: budidino,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-02-19 01:47:06
    let imagePickerController = UIImagePickerController()
    imagePickerController.delegate = self
    let actionSheet = UIAlertController(title: "Photo Source", 
    message:  "Choose a source", preferredStyle: .actionSheet)
    actionSheet.addAction(UIAlertAction(title: "Camera", 
       style:.default, handler: {(action: UIAlertAction)in
        if UIImagePickerController.isSourceTypeAvailable(.camera){
            imagePickerController.sourceType = .camera
            self.present(imagePickerController, 
            animated: true,completion: nil)
        }
        else{
            print("camera is not available")
        }  
    }))
    actionSheet.addAction(UIAlertAction(title: "Photo Library", 
                      style:.default, handler: {(action: UIAlertAction)in
        imagePickerController.sourceType = .photoLibrary
        self.present(imagePickerController, animated: true,
                                        completion: nil)

    }))
    actionSheet.addAction(UIAlertAction(title: "Cancle", 
     style: .cancel, handler: nil))
    self.present(actionSheet, animated: true, completion: nil)

  func imagePickerController(_ picker:UIImagePickerController,       
             didFinishPickingMediaWithInfo info: [String : Any]) 
   {
    let image = info[UIImagePickerControllerOriginalImage] as! UIImage
    myImage.image = image
    picker.dismiss(animated: true, completion: nil)
   }
 func imagePickerControllerDidCancel(_ picker: UIImagePickerController) {
    picker.dismiss(animated: true, completion: nil)
     }
 1
Author: Dharasanada paras,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-03-09 17:15:58

Upvoted odpowiedź rozciąga obraz tła zmieniając jego stosunek. Poniższe rozwiązanie naprawia to, renderując obraz z widoku UIView, który zawiera dwa widoki obrazu jako podview.

Odpowiedź, której szukasz (Swift 4):

func blendImages(_ img: UIImage,_ imgTwo: UIImage) -> Data? {
    let bottomImage = img
    let topImage = imgtwo

    let imgView = UIImageView(frame: CGRect(x: 0, y: 0, width: 306, height: 306))
    let imgView2 = UIImageView(frame: CGRect(x: 0, y: 0, width: 306, height: 306))

    // - Set Content mode to what you desire
    imgView.contentMode = .scaleAspectFill
    imgView2.contentMode = .scaleAspectFit

    // - Set Images
    imgView.image = bottomImage
    imgView2.image = topImage

    // - Create UIView
    let contentView = UIView(frame: CGRect(x: 0, y: 0, width: 306, height: 306))
    contentView.addSubview(imgView)
    contentView.addSubview(imgView2)

    // - Set Size
    let size = CGSize(width: 306, height: 306)

    // - Where the magic happens
    UIGraphicsBeginImageContextWithOptions(size, true, 0)

    contentView.drawHierarchy(in: contentView.bounds, afterScreenUpdates: true)

    guard let i = UIGraphicsGetImageFromCurrentImageContext(),
        let data = UIImageJPEGRepresentation(i, 1.0)
        else {return nil}

    UIGraphicsEndImageContext()

    return data
}

Zwrócone dane obrazu podwajają Rozmiar obrazu, więc ustaw rozmiar widoków na połowę pożądanego rozmiaru.

  • przykład: chciałem, aby szerokość i wysokość obrazu była 612 , więc ja ustaw szerokość i wysokość ramek widoku na 306) // Enjoy :)
 0
Author: Milez,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-09-05 23:10:04

Objective C wersja tego rozwiązania z top image re-centered logic:

-(UIImage *)getImageInclosedWithinAnotherImage
{
    float innerImageSize = 20;
    UIImage *finalImage;

    UIImage *outerImage = [UIImage imageNamed:@"OuterImage.png"];
    UIImage *innerImage = [UIImage imageNamed:@"InnerImage.png"];

    CGSize outerImageSize = CGSizeMake(40, 40); // Provide custom size or size of your actual image
    UIGraphicsBeginImageContext(outerImageSize);

    //calculate areaSize for re-centered inner image
    CGRect areSize = CGRectMake(((outerImageSize.width/2) - (innerImageSize/2)), ((outerImageSize.width/2) - (innerImageSize/2)), innerImageSize, innerImageSize);
    [outerImage drawInRect:CGRectMake(0, 0, outerImageSize.width, outerImageSize.height)];
    [innerImage drawInRect:areSize blendMode:kCGBlendModeNormal alpha:1.0];

    finalImage = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();

    return finalImage;
}
 -1
Author: iLearner,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-03-09 16:36:43