Я хотел бы обрезать изображение в iOS на основе маски неправильной формы. Как я могу это сделать?Как обрезать изображение на основе неправильной формы?
8
A
ответ
3
Я не уверен, что вы хотите обрезать, но вместо этого вы хотите замаскировать изображение. Это довольно легко сделать, но в конечном итоге вы обнаружите, что оно работает для некоторых изображений, а не для других. Это связано с тем, что вам нужно иметь надлежащий альфа-канал в изображении.
Вот код, который я использую, который я получил от stackoverflow. (Problem with transparency when converting UIView to UIImage)
CGImageRef CopyImageAndAddAlphaChannel(CGImageRef sourceImage) {
CGImageRef retVal = NULL;
size_t width = CGImageGetWidth(sourceImage);
size_t height = CGImageGetHeight(sourceImage);
CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB();
CGContextRef offscreenContext = CGBitmapContextCreate(NULL, width, height,
8, 0, colorSpace, kCGImageAlphaPremultipliedFirst);
if (offscreenContext != NULL) {
CGContextDrawImage(offscreenContext, CGRectMake(0, 0, width, height), sourceImage);
retVal = CGBitmapContextCreateImage(offscreenContext);
CGContextRelease(offscreenContext);
}
CGColorSpaceRelease(colorSpace);
return retVal;
}
- (UIImage*)maskImage:(UIImage *)image withMask:(UIImage *)maskImage {
CGImageRef maskRef = maskImage.CGImage;
CGImageRef mask = CGImageMaskCreate(CGImageGetWidth(maskRef),
CGImageGetHeight(maskRef),
CGImageGetBitsPerComponent(maskRef),
CGImageGetBitsPerPixel(maskRef),
CGImageGetBytesPerRow(maskRef),
CGImageGetDataProvider(maskRef), NULL, false);
CGImageRef sourceImage = [image CGImage];
CGImageRef imageWithAlpha = sourceImage;
//add alpha channel for images that don't have one (ie GIF, JPEG, etc...)
//this however has a computational cost
// needed to comment out this check. Some images were reporting that they
// had an alpha channel when they didn't! So we always create the channel.
// It isn't expected that the wheelin application will be doing this a lot so
// the computational cost isn't onerous.
//if (CGImageGetAlphaInfo(sourceImage) == kCGImageAlphaNone) {
imageWithAlpha = CopyImageAndAddAlphaChannel(sourceImage);
//}
CGImageRef masked = CGImageCreateWithMask(imageWithAlpha, mask);
CGImageRelease(mask);
//release imageWithAlpha if it was created by CopyImageAndAddAlphaChannel
if (sourceImage != imageWithAlpha) {
CGImageRelease(imageWithAlpha);
}
UIImage* retImage = [UIImage imageWithCGImage:masked];
CGImageRelease(masked);
return retImage;
}
И вы называете это так:
customImage = [customImage maskImage:customImage withMask:[UIImage imageNamed:@"CircularMask.png"]];
В этом случае я использую круглую маску, чтобы сделать круглое изображение. Вам нужно будет сделать нерегулярную маску, которая соответствует вашим потребностям.
Смежные вопросы
- 1. Как обрезать изображение на основе 2d массива
- 2. Как обрезать изображение на основе двоичной маски
- 3. Создание рамки неправильной формы
- 4. Как разместить изображение в кадре неправильной формы
- 5. Установка неправильной формы в круг
- 6. Обрезать изображение в неправильной форме и растянуть его
- 7. Как обрезать изображение на кадр
- 8. Как обрезать изображение на Java?
- 9. Как изменить изображение на основе выбора формы?
- 10. Как обрезать изображение в php на основе распознавания лица
- 11. Как обрезать изображение на основе темных областей/шума?
- 12. Обрезать изображение на лету
- 13. Схема неправильной формы формы
- 14. Сравнение неправильной формы
- 15. Смежные изображения неправильной формы
- 16. Как обрезать изображение?
- 17. Как обрезать огромное изображение
- 18. PHP - Как обрезать изображение?
- 19. Как обрезать/обрезать изображение равномерно в ImageMagick?
- 20. Как определить, что IPad пользователей краны в изображение неправильной формы?
- 21. Как обрезать это изображение?
- 22. Как обрезать фоновое изображение?
- 23. Как обрезать растровое изображение?
- 24. Как обрезать растровое изображение?
- 25. Обрезать изображение в C#
- 26. обрезать изображение на несколько прямоугольников
- 27. Libgdx обрезать изображение на круг
- 28. Обрезать изображение на квадрат - Android
- 29. как сделать неправильной формы TextView
- 30. Как определить границы неправильной формы?
спасибо за ваш повтор, но моя проблема в другом. У меня есть 4 разных точки, например, трапеция. Пользователь также может изменить эту точку и сделать форму собственным стилем. Теперь я хочу обрезать изображение как ту же форму, которую пользователь создал точка драки –
Можете ли вы взять 4 очка, отнести их к маске, а затем использовать приведенный выше код? –
жаль, что я новичок в разработке IOS. Я не могу понять вашу точку зрения. Например, у меня есть четыре точки CGPoint firstPoint, secondPoint, thirdPoint и 4thPoint трапеции, а затем как я использую приведенный выше код. Спасибо –