簡體   English   中英

合並兩個旋轉和縮放的UIImage

[英]Merge Two UIImage that are Rotated & Scaled

我正在做一個類似這樣的應用程序:加載一張照片,然后在其上放置圖像,例如氣球等。

當我嘗試僅通過調整大小來合並其中一個圖像時,它工作正常。 比應有的像素多10像素,但沒有問題。

問題是,當您旋轉圖像[UIImageView]時,它看起來比其圖像大得多,我嘗試分配所有內容,但一無所獲。 我離開了代碼。 我希望有人可以幫忙。

注意:圖像大小位於UIImageView內部,然后乘以主圖像的比例

- (UIImage *)mergeImage:(UIImageView *)mainImage withImageView:(UIImageView *)imageView {

    UIImage *temp = imageView.image;
    UIImage *tempMain = mainImage.image;

    CGFloat mainScale = [self imageViewScaleFactor:mainImage];
    CGFloat tempScale = 1/mainScale;
    NSLog(@"%f", tempScale);

    //Rotate UIIMAGE
    UIGraphicsBeginImageContext(temp.size);
    CGContextRef ctx = UIGraphicsGetCurrentContext();
    CGAffineTransform transform = CGAffineTransformIdentity;
    transform = CGAffineTransformTranslate(transform, temp.size.width/2, temp.size.height/2);    
    CGFloat angle = atan2(imageView.transform.b, imageView.transform.a);    
    transform = CGAffineTransformRotate(transform, angle);
    transform = CGAffineTransformScale(transform, 1.0, -1.0);
    CGContextConcatCTM(ctx, transform);
    // Draw the image into the context
    CGContextDrawImage(ctx, CGRectMake(-temp.size.width/2, -temp.size.height/2, temp.size.width, temp.size.height), temp.CGImage);
    // Get an image from the context
    temp = [UIImage imageWithCGImage: CGBitmapContextCreateImage(ctx)];


    NSLog(@"%f %f %f", mainScale, mainImage.frame.size.width, mainImage.frame.size.height);

    UIGraphicsBeginImageContextWithOptions(tempMain.size, NO, 1.0f);

    //Get imageView size & position 
    NSLog(@"%f %f %f %f", imageView.frame.origin.x, imageView.frame.origin.y, imageView.frame.size.width, imageView.frame.size.height);

    CGFloat offsetX = 0;
    CGFloat offsetY = -44;

    if (tempMain.size.height > tempMain.size.width) {
        offsetX = ((tempMain.size.width * mainScale) - 320)/2;
    }else{
        offsetY = ((tempMain.size.height * mainScale) - 416)/2;
        offsetY -= 44;
    }

    CGFloat imageViewX = (imageView.frame.origin.x + offsetX) * tempScale;
    CGFloat imageViewY = (imageView.frame.origin.y + offsetY) * tempScale;
    CGFloat imageViewW = imageView.frame.size.width * tempScale;
    CGFloat imageViewH = imageView.frame.size.height * tempScale;


    CGRect tempRect = CGRectMake(imageViewX, imageViewY, imageViewW, imageViewH);


    [tempMain drawAtPoint:CGPointZero];
    [temp drawInRect:tempRect];

    UIImage *newImage = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();

    return newImage;
}

謝謝

這是對我有用的解決方案

合並一個由UIImageView手勢旋轉的位置與另一個位置。 所見即所得不是所見即所得

我只是在主屏幕上拍攝一張照片,然后將其裁剪為照片的大小,更快,更干凈。 如果應用程序在正常設備中的視網膜中運行,分辨率還不錯。 您需要准備該代碼才能在視網膜和非視網膜中工作

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM