位圖上下文
- 怎么讓方形圖片變成圓形圖片?
- 位圖上下文
- 生成了一張新的圖片
- 應(yīng)用:水印、圓形圖片裁剪
- 手動(dòng)開(kāi)啟上下文,指定上下文的大小
- 創(chuàng)建時(shí)上下文的大小,決定著生成圖片的大小
水印
位圖上下文的大小 = 圖片的大小
加水?。荷梢粡埿碌膱D片
注意:生成圖片不是在view上畫(huà)東西了,不用自定義view,不用寫drawRect方法;生成圖片可以在任何地方生成。
生成一張新的圖片
加載圖片
要繪制的文字
-
開(kāi)啟位圖上下文
- 開(kāi)啟上下文UIGraphicsBeginImageContext
- 創(chuàng)建時(shí)上下文的大小決定著生成圖片的大小
-
把圖片會(huì)知道上下文當(dāng)中
- drawAtPoint/drawInRect
-
畫(huà)文字
- drawAtPoint:withAttribute:
-
從上下文當(dāng)中生成一張新的圖片
- UIGraphicsGetImageFromCurrentImageContext()
- 把上下文當(dāng)中所有繪制的內(nèi)容合成到一起,生成一張新的圖片
-
手動(dòng)關(guān)閉上下文
- UIGraphicsEndImageContext()
-
拖線,賦值
- self.imageV.image = newImage;
頭像(生成圓形圖片)
- 加載圖片
- 開(kāi)啟位圖上下文
- UIGraphicsBeginImageContext
- 位圖上下文大小 = 圖片大小
- 裁剪(繪制之前做裁剪)
- UIBezierPath OvalInRect
- UIRectClip
- 把路徑設(shè)置為裁剪區(qū)域(超出裁剪區(qū)域以外的內(nèi)容會(huì)自動(dòng)裁剪掉)
- [path addClip]
- 對(duì)之前已經(jīng)畫(huà)上去的東西,沒(méi)有作用
- 把圖片繪制到上下文當(dāng)中
- drawAtPoint
- 從位圖上下文當(dāng)中生成一張圖片
- UIGraphicsGetImageFromCurrentImageContext()
- 關(guān)閉位圖上下文
- UIGraphicsEndImageContext()
- 拖線,展示
- self.imageV.image = newImage;
帶有邊框的圓形圖片裁剪(抽一個(gè)分類方便復(fù)用)
加載圖片
設(shè)置邊框?qū)挾?/p>
-
開(kāi)啟位圖上下文
- 大小 = 圖片的寬高 + 2倍圖片邊框的寬高
- UIGraphicsBeginImageContext()
-
繪制一個(gè)大圓
- UIBezierPath OvalInRect
把大圓畫(huà)上去 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)容畫(huà)到上下文當(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)成像素
- 開(kāi)啟上下文
- 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縮放比例
截圖
- 遮蓋
- 截圖
- 蒙版遮蓋
- 開(kāi)始拖動(dòng)的點(diǎn)
- 當(dāng)前手指的點(diǎn)
- 寬高--x,y的偏移量
- 添加手勢(shì)Pan Gesture Recognizer
- 監(jiān)聽(tīng)拖動(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手指松開(kāi)
- 移除遮蓋
- state:Begin
- 把超過(guò)遮蓋以外的內(nèi)容裁減掉
- 生成一張和imageView一樣大的圖片
- 開(kāi)啟上下文UIGraphicsBeginImageContext:默認(rèn)是透明的
- 裁剪:UIRectClip(遮蓋的frame)
- CGContextRef
- renderInContext
- 生成圖片
- 關(guān)閉上下文
- self.imageV.image = newImage
擴(kuò)展
- 手指松開(kāi),生成圖片不是imageView大小
- 把生成遮蓋大小的圖片,顯示到桌面上面
- 畫(huà)圖片,開(kāi)啟上下文,遮蓋大小
- 拿到圖片,往上面畫(huà)
圖片擦除(橡皮擦功能)
- uerInteraction
- 添加手勢(shì)
- Pan
- 擦除區(qū)域
- 獲取當(dāng)前手指的點(diǎn)locationInView
- rectWH = 30
- X:當(dāng)前點(diǎn)x- 寬度的一半
- Y:當(dāng)前點(diǎn)y- 高度一半
- 開(kāi)啟上下文Begin
- 把圖片內(nèi)容畫(huà)到畫(huà)板上renderInContext
- 擦除
- CGContextClearRect(context,rect)
- 生成一張圖片Get
- 關(guān)閉上下文End
- 替換imageView