Quartz2D练习 -- 裁剪图片分类

Main.storyboard


<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<document type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" version="3.0" toolsVersion="5053" systemVersion="13D65" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" initialViewController="vXZ-lx-hvc">
<dependencies>
<plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="3733"/>
</dependencies>
<scenes>
<!--View Controller-->
<scene sceneID="ufC-wZ-h7g">
<objects>
<viewController id="vXZ-lx-hvc" customClass="LWTViewController" sceneMemberID="viewController">
<view key="view" contentMode="scaleToFill" id="kh9-bI-dsS">
<rect key="frame" x="0.0" y="0.0" width="320" height="480"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
<subviews>
<imageView userInteractionEnabled="NO" contentMode="scaleToFill" horizontalHuggingPriority="251" verticalHuggingPriority="251" id="mkN-c5-tVD">
<rect key="frame" x="0.0" y="0.0" width="320" height="480"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
</imageView>
</subviews>
<color key="backgroundColor" white="1" alpha="1" colorSpace="custom" customColorSpace="calibratedWhite"/>
</view>
<connections>
<outlet property="imageView" destination="mkN-c5-tVD" id="oa0-4P-LEN"/>
</connections>
</viewController>
<placeholder placeholderIdentifier="IBFirstResponder" id="x5A-6p-PRh" sceneMemberID="firstResponder"/>
</objects>
</scene>
</scenes>
<simulatedMetricsContainer key="defaultSimulatedMetrics">
<simulatedStatusBarMetrics key="statusBar"/>
<simulatedOrientationMetrics key="orientation"/>
<simulatedScreenMetrics key="destination"/>
</simulatedMetricsContainer>
</document>

LWTViewController.h


#import <UIKit/UIKit.h>

@interface LWTViewController : UIViewController

@end

LWTViewController.m


 1 //
2 // LWTViewController.m
3 // Quartz2D练习 -- 裁剪图片分类
4 //
5 // Created by apple on 14-6-10.
6 // Copyright (c) 2014年 lwt. All rights reserved.
7 //
8
9 #import "LWTViewController.h"
10 #import "UIImage+cutImageRound.h"
11
12 @interface LWTViewController ()
13 @property (weak, nonatomic) IBOutlet UIImageView *imageView;
14
15 @end
16
17 @implementation LWTViewController
18
19 - (void)viewDidLoad
20 {
21 [super viewDidLoad];
22 // Do any additional setup after loading the view, typically from a nib.
23
24 // 获取要裁剪图片
25 UIImage *newImage = [UIImage imageWithImageName:@"scene" margin:20 frameColor:[UIColor magentaColor]];
26 // 测试图片效果
27 // imageView的size等于图片的size
28 self.imageView.frame = CGRectMake(0, 0, newImage.size.width, newImage.size.height);
29 self.imageView.image = newImage;
30
31 //保存图片
32 // 将图片传承二进制数据
33 NSData *data = UIImagePNGRepresentation(newImage);
34 // 保存图片的地址
35 NSString *path = [[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject] stringByAppendingPathComponent:@"cutImage.png"];
36 // 保存图片
37 [data writeToFile:path atomically:YES];
38
39
40 }
41 @end

UIImage+cutImageRound.h


#import <UIKit/UIKit.h>

@interface UIImage (cutImageRound)
/**
* 将图片裁剪成圆形
*
* @param imageName 需要裁剪的图片
* @param margin 相框的尺寸
* @param frameColor 相框的背景颜色
*
* @return 返回裁剪好的图片
*/
+ (UIImage *)imageWithImageName:(NSString *)imageName margin:(CGFloat)margin frameColor:(UIColor *)frameColor;

@end

UIImage+cutImageRound.m


//
// UIImage+cutImageRound.m
// Quartz2D练习 -- 裁剪图片分类
//
// Created by apple on 14-6-10.
// Copyright (c) 2014年 lwt. All rights reserved.
//

#import "UIImage+cutImageRound.h"

@implementation UIImage (cutImageRound)

+ (UIImage *)imageWithImageName:(NSString *)imageName margin:(CGFloat)margin frameColor:(UIColor *)frameColor
{
// 0. 加载原有图片
UIImage *image = [UIImage imageNamed:imageName];

CGFloat imageW = image.size.width;
CGFloat imageH = image.size.height;

CGFloat graphW = imageW + 2 * margin;
CGFloat graphH = imageH + 2 * margin;

// 创建bigmap图形上下文
UIGraphicsBeginImageContextWithOptions(CGSizeMake(graphW, graphH), NO, 0);

// 获取图形上下文
CGContextRef ctx = UIGraphicsGetCurrentContext();

// 绘制背景大圆
CGFloat bigX = 0;
CGFloat bigY = 0;
CGFloat bigW = graphW;
CGFloat bigH = graphH;
CGContextAddEllipseInRect(ctx, CGRectMake(bigX, bigY, bigW, bigH));
[frameColor set];
CGContextFillPath(ctx);

// 绘制剪切园
CGFloat cutX = margin;
CGFloat cutY = margin;
CGFloat cutW = imageW;
CGFloat cutH = imageH;
CGContextAddEllipseInRect(ctx, CGRectMake(cutX, cutY, cutW, cutH));
CGContextClip(ctx);

// 绘制裁剪图片
CGFloat imageX = cutX;
CGFloat imageY = cutY;

[image drawInRect:CGRectMake(imageX, imageY, imageW, imageH)];

// 获取绘制好的图片
UIImage *newImage = UIGraphicsGetImageFromCurrentImageContext();

return newImage;

}

@end


Quartz2D练习 -- 裁剪图片分类,布布扣,bubuko.com

时间: 2024-10-26 20:31:21

Quartz2D练习 -- 裁剪图片分类的相关文章

IOS开发——UI进阶篇(十八)核心动画小例子,转盘(裁剪图片、自定义按钮、旋转)图片折叠、音量震动条、倒影、粒子效果

一.转盘(裁剪图片.自定义按钮.旋转) 1.裁剪图片 将一张大图片裁剪为多张 // CGImageCreateWithImageInRect:用来裁剪图片 // image:需要裁剪的图片 // rect:裁剪图片的尺寸,传递是像素 CGImageRef norImage = CGImageCreateWithImageInRect(norBigImage.CGImage, clipRect); 2.每次点击按钮立马变为选中状态,并且取消上次的按钮的选中状态 当然还要重写- (void)setH

自定义裁剪图片

判断图片大小,根据裁剪目标对图片进行缩放,然后裁剪图片(在图像不变形情况下) /// <summary> /// 指定长宽裁剪 /// 按模版比例最大范围的裁剪图片并缩放至模版尺寸 /// </summary> /// <param name="fromFile">原图Stream对象</param> /// <param name="fileSaveUrl">保存路径</param> ///

iOS开发UI篇—Quartz2D使用(图片剪切)

iOS开发UI篇-Quartz2D使用(图片剪切) 一.使用Quartz2D完成图片剪切 1.把图片显示在自定义的view中 先把图片绘制到view上.按照原始大小,把图片绘制到一个点上. 代码: 1 - (void)drawRect:(CGRect)rect 2 { 3 UIImage *image2=[UIImage imageNamed:@"me"]; 4 [image2 drawAtPoint:CGPointMake(100, 100)]; 5 } 显示: 2.剪切图片让图片圆

[第4组]典型场景:图片分类 工作序号:005 2017/7/6

场景工作序号005:照片分类1.背景1)典型用户:白领王女士2)客户的需求/迫切解决的问题王女士旅游归来想要将相机中杂乱无章的照片按景点分好类.3) 假设:a.王女士的照片已经导入到了本地磁盘中b.软件相关功能已实现完成.2.场景关于这个场景的文字描述白领王女士趁着放假和父母孩子一起去了张家界旅游,回来之后想要把拍的照片简单分类.打开软件后她先进入图库界面,点击页面上的设置按钮进入设置页面,然后她点击文件夹设置中的添加文件夹"+"符号,在选择好正确的本地图片存放路径后,他点击了确定按钮

IOS 按比例裁剪图片

拍照或者从图片库中获取图片 操作过程中容易闪退,也总会有内存压力警告,第一步,首先可以考虑裁剪图片,实际上可能不需要那么大的.其次可以考虑把耗时的比如存储过程放进线程. 这里封装裁剪图片的类方法. //NavView.m #define IMAGE_MAX_SIZE_WIDTH 640 #define IMAGE_MAX_SIZE_GEIGHT 1136 +(UIImage *)fitSmallImage:(UIImage *)image { if (nil == image) { return

MVC使用JCrop上传、裁剪图片

JCrop用来裁剪图片,本篇想体验的是: 在视图页上传图片: 上传成功,跳转到另外一个编辑视图页,使用JCrop对该图片裁剪,并保存图片到指定文件夹: 裁剪成功后,在主视图页显示裁剪图片: 当然,实际项目中最有可能的做法是:在本页上传.裁剪并保存. □ 思路 →在上传图片视图页,把图片上传保存到一个临时文件夹Upload→在编辑裁剪视图页,点击"裁剪"按钮,把JCrop能提供的参数,比如宽度.高度.离顶部距离,离底部距离,离左右端距离等封装成类,传递给控制器方法→控制器方法根据接收到的

Android拍照、相册选取、裁剪图片

来自:http://blog.csdn.net/ryantang03/article/details/8656278 package com.example.listactivity; import java.io.ByteArrayOutputStream; import java.io.File; import com.example.model.ImageTools; import android.app.Activity; import android.app.AlertDialog;

调用 android 系统拍照结合 android-crop 裁剪图片

在一个应用中更换用户的头像,一般有拍照和从图库中选择照片两种方法,现在网上也有很多开源的,但是很多都太复杂.而 Android-crop 这个库比较小,代码不复杂,比较适合,但是它没有拍照这个功能,需要我们自己整合进去. 调用系统相机拍照 返回略缩图的拍照 // 调用系统的拍照 private void dispatchTakePictureIntent() { Intent takePictureIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTU

Android 从图库选择图片,拍照图片,裁剪图片

我直接写代码了 1先来几个常亮 private static final int PHOTO_REQUEST_CAREMA = 1;// 拍照private static final int PHOTO_REQUEST_GALLERY = 2;// 从相册中选择private static final int PHOTO_REQUEST_CUT = 3;// 结果private static final String PHOTO_FILE_NAME = "temp_photo.jpg"