位圖上下文
- 怎么讓方形圖片變成圓形圖片毙驯?
- 位圖上下文
- 生成了一張新的圖片
- 應(yīng)用:水印倒堕、圓形圖片裁剪
- 手動(dòng)開啟上下文,指定上下文的大小
- 創(chuàng)建時(shí)上下文的大小爆价,決定著生成圖片的大小
水印
位圖上下文的大小 = 圖片的大小
加水涌寻汀:生成一張新的圖片
注意:生成圖片不是在view上畫東西了媳搪,不用自定義view,不用寫drawRect方法;生成圖片可以在任何地方生成骤宣。
生成一張新的圖片
加載圖片
要繪制的文字
-
開啟位圖上下文
- 開啟上下文UIGraphicsBeginImageContext
- 創(chuàng)建時(shí)上下文的大小決定著生成圖片的大小
-
把圖片會(huì)知道上下文當(dāng)中
- drawAtPoint/drawInRect
-
畫文字
- drawAtPoint:withAttribute:
-
從上下文當(dāng)中生成一張新的圖片
- UIGraphicsGetImageFromCurrentImageContext()
- 把上下文當(dāng)中所有繪制的內(nèi)容合成到一起蛾号,生成一張新的圖片
-
手動(dòng)關(guān)閉上下文
- UIGraphicsEndImageContext()
-
拖線,賦值
- self.imageV.image = newImage;
頭像(生成圓形圖片)
- 加載圖片
- 開啟位圖上下文
- UIGraphicsBeginImageContext
- 位圖上下文大小 = 圖片大小
- 裁剪(繪制之前做裁剪)
- UIBezierPath OvalInRect
- UIRectClip
- 把路徑設(shè)置為裁剪區(qū)域(超出裁剪區(qū)域以外的內(nèi)容會(huì)自動(dòng)裁剪掉)
- [path addClip]
- 對(duì)之前已經(jīng)畫上去的東西涯雅,沒有作用
- 把圖片繪制到上下文當(dāng)中
- drawAtPoint
- 從位圖上下文當(dāng)中生成一張圖片
- UIGraphicsGetImageFromCurrentImageContext()
- 關(guān)閉位圖上下文
- UIGraphicsEndImageContext()
- 拖線鲜结,展示
- self.imageV.image = newImage;
帶有邊框的圓形圖片裁剪(抽一個(gè)分類方便復(fù)用)
加載圖片
設(shè)置邊框?qū)挾?/p>
-
開啟位圖上下文
- 大小 = 圖片的寬高 + 2倍圖片邊框的寬高
- UIGraphicsBeginImageContext()
-
繪制一個(gè)大圓
- UIBezierPath OvalInRect
把大圓畫上去 path fill
-
設(shè)置裁剪區(qū)域
- UIBezierPath
- x,y:邊框?qū)挾?/li>
- 寬度高度 = 圖片的寬高
- UIBezierPath
-
把路徑設(shè)置為裁剪區(qū)域
- addClip
把圖片繪制到上下文
-
從位圖上下文當(dāng)中生成一張圖片
- UIGraphicsGetImageFromCurrentImageContext()
-
關(guān)閉上下文
- UIGraphicsEndImageContext()
-
拖線,展示
- self.imageV.image = newImage;
-
抽一個(gè)分類活逆,方便復(fù)用
- 圖片精刷,邊框大小,大圓的顏色是變化的
- ObjectC-file
- UIImage()
- 把出現(xiàn)中文的蔗候,放到后面
截屏(新的知識(shí)點(diǎn):二進(jìn)制流)
- 生成一張新的圖片
- 創(chuàng)建一個(gè)位圖上下文
- 大小等于屏幕大小
- 獲取當(dāng)前上下文
- CGContextRef UIGraphicsGetCurrentContext
- 把控制器的view內(nèi)容畫到上下文當(dāng)中
- view之所以能顯示是因?yàn)閮?nèi)部有l(wèi)ayer
- self.view.layer renderInContext:
- 從上下文當(dāng)中生成一張新的圖片
- Get
- 關(guān)閉上下文
- End
- 把手機(jī)生成的圖片怒允,生成到電腦的桌面上
- 怎么把圖片上傳到服務(wù)器的?
- 把圖片轉(zhuǎn)成二進(jìn)制流
- 如何把圖片轉(zhuǎn)成二進(jìn)制流?
- UIImage
- 轉(zhuǎn)成jpe還是png
- UIImageJPERepresentation(newImage,壓縮質(zhì)量:范圍0~1)
- 返回值NSData
- data writeToFile:atomically:
- UIImagePNGRepresentation(本身就是最高質(zhì)量的圖片)
截屏擴(kuò)展
- [UIScreen mainScreen].scale 不是固定的值锈遥,根據(jù)手機(jī)型號(hào)的不同值不同
- 點(diǎn)坐標(biāo)*比例 ——> 轉(zhuǎn)成像素坐標(biāo)
- 在OC當(dāng)中會(huì)自動(dòng)把點(diǎn)坐標(biāo)轉(zhuǎn)成像素
在C語(yǔ)言當(dāng)中纫事,它不會(huì)自動(dòng)轉(zhuǎn)成像素
- 開啟上下文
- UIGraphicsBeginImageContextWithOptions(上下文大小,是否為不透明度opaque NO,scale縮放比例
點(diǎn)坐標(biāo)與像素的比例
) - scale 1.0
- scale 2.0 打印的size 和生成圖片的size尺寸不一樣
- scale 0.0 設(shè)備的[UIScreen mainScreen].scale
- scale 縮放因子 bitmap
- UIGraphicsBeginImageContextWithOptions(上下文大小,是否為不透明度opaque NO,scale縮放比例
截圖
- 遮蓋
- 截圖
- 蒙版遮蓋
- 開始拖動(dòng)的點(diǎn)
- 當(dāng)前手指的點(diǎn)
- 寬高--x,y的偏移量
- 添加手勢(shì)Pan Gesture Recognizer
- 監(jiān)聽拖動(dòng)時(shí)會(huì)調(diào)用哪個(gè)方法,拖線所灸,判斷手勢(shì)狀態(tài)
- state:Begin
- 獲取手指當(dāng)前點(diǎn):locationInView
- 定義一個(gè)成員屬性丽惶,方便下面拿到當(dāng)前點(diǎn)
- state:Change
- locationInView
- 寬度:x方向偏移量
- 高度:y方向的偏移量
- frame
- startP.X
- startP.y
- w
- h
- 創(chuàng)建遮蓋的view
- 懶加載
- 懶加載的好處:
- 1.什么時(shí)候使用什么時(shí)候才去創(chuàng)建,節(jié)省內(nèi)存
- 2.保證對(duì)象只有一個(gè)
- 3.保證該對(duì)象在使用時(shí)一直存在
- state:End手指松開
- 移除遮蓋
- state:Begin
- 把超過遮蓋以外的內(nèi)容裁減掉
- 生成一張和imageView一樣大的圖片
- 開啟上下文UIGraphicsBeginImageContext:默認(rèn)是透明的
- 裁剪:UIRectClip(遮蓋的frame)
- CGContextRef
- renderInContext
- 生成圖片
- 關(guān)閉上下文
- self.imageV.image = newImage
擴(kuò)展
- 手指松開爬立,生成圖片不是imageView大小
- 把生成遮蓋大小的圖片钾唬,顯示到桌面上面
- 畫圖片,開啟上下文侠驯,遮蓋大小
- 拿到圖片抡秆,往上面畫
圖片擦除(橡皮擦功能)
- uerInteraction
- 添加手勢(shì)
- Pan
- 擦除區(qū)域
- 獲取當(dāng)前手指的點(diǎn)locationInView
- rectWH = 30
- X:當(dāng)前點(diǎn)x- 寬度的一半
- Y:當(dāng)前點(diǎn)y- 高度一半
- 開啟上下文Begin
- 把圖片內(nèi)容畫到畫板上renderInContext
- 擦除
- CGContextClearRect(context,rect)
- 生成一張圖片Get
- 關(guān)閉上下文End
- 替換imageView