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