ImageMogrTemplate.php 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374
  1. <?php
  2. namespace Qcloud\Cos\ImageParamTemplate;
  3. /**
  4. * Class ImageMogrTemplate imageMogr2 接口参数
  5. * @package Qcloud\Cos\ImageParamTemplate
  6. */
  7. class ImageMogrTemplate extends ImageTemplate
  8. {
  9. private $tranParams;
  10. private $tranString;
  11. public function __construct() {
  12. parent::__construct();
  13. $this->tranParams = array();
  14. $this->tranString = "";
  15. }
  16. /**
  17. * 指定图片的宽高为原图的 Scale%
  18. * @param $widthScale
  19. */
  20. public function thumbnailByScale($widthScale) {
  21. $this->tranParams[] = "/thumbnail/!" . $widthScale . "p";
  22. }
  23. /**
  24. * 指定图片的宽为原图的 Scale%,高度不变
  25. * @param $heightScale
  26. */
  27. public function thumbnailByWidthScale($heightScale) {
  28. $this->tranParams[] = "/thumbnail/!" . $heightScale . "px";
  29. }
  30. /**
  31. * 指定图片的高为原图的 Scale%,宽度不变
  32. * @param $scale
  33. */
  34. public function thumbnailByHeightScale($scale) {
  35. $this->tranParams[] = "/thumbnail/!x" . $scale . "p";
  36. }
  37. /**
  38. * 指定目标图片宽度为 Width,高度等比缩放
  39. * @param $width
  40. */
  41. public function thumbnailByWidth($width) {
  42. $this->tranParams[] = "/thumbnail/" . $width . "x";
  43. }
  44. /**
  45. * 指定目标图片高度为 Height,宽度等比缩放
  46. * @param $height
  47. */
  48. public function thumbnailByHeight($height) {
  49. $this->tranParams[] = "/thumbnail/x" . $height;
  50. }
  51. /**
  52. * 限定缩略图的宽度和高度的最大值分别为 Width 和 Height,进行等比缩放
  53. * @param $maxW
  54. * @param $maxH
  55. */
  56. public function thumbnailByMaxWH($maxW, $maxH) {
  57. $this->tranParams[] = "/thumbnail/" . $maxW . "x" . $maxH;
  58. }
  59. /**
  60. * 限定缩略图的宽度和高度的最小值分别为 Width 和 Height,进行等比缩放
  61. * @param $minW
  62. * @param $minH
  63. */
  64. public function thumbnailByMinWH($minW, $minH) {
  65. $this->tranParams[] = "/thumbnail/!" . $minW . "x" . $minH . "r" ;
  66. }
  67. /**
  68. * 忽略原图宽高比例,指定图片宽度为 Width,高度为 Height,强行缩放图片,可能导致目标图片变形
  69. * @param $width
  70. * @param $height
  71. */
  72. public function thumbnailByWH($width, $height) {
  73. $this->tranParams[] = "/thumbnail/" . $width . "x" . $height . "!";
  74. }
  75. /**
  76. * 限定缩略图的宽度和高度的最大值分别为 Width 和 Height,进行等比缩小,比例值为宽缩放比和高缩放比的较小值,如果目标宽(高)都大于原图宽(高),则不变
  77. * @param $width
  78. * @param $height
  79. */
  80. public function thumbnailEqualRatioReduceByWH($width, $height) {
  81. $this->tranParams[] = "/thumbnail/{$width}x{$height}>";
  82. }
  83. /**
  84. * 限定缩略图的宽度和高度的最大值分别为 Width 和 Height,进行等比放大,比例值为宽缩放比和高缩放比的较小值。如果目标宽(高)小于原图宽(高),则不变
  85. * @param $width
  86. * @param $height
  87. */
  88. public function thumbnailEqualRatioEnlargeByWH($width, $height) {
  89. $this->tranParams[] = "/thumbnail/{$width}x{$height}<";
  90. }
  91. /**
  92. * 等比缩放图片,缩放后的图像,总像素数量不超过 $pixel
  93. * @param $pixel
  94. */
  95. public function thumbnailByPixel($pixel) {
  96. $this->tranParams[] = "/thumbnail/" . $pixel . "@";
  97. }
  98. /**
  99. * 将原图缩放为指定 Width 和 Height 的矩形内的最大图片,之后使用 color 参数指定的颜色居中填充空白部分;取值0或1,0代表不使用 pad 模式,1代表使用 pad 模式
  100. * @param $is
  101. */
  102. public function pad($is) {
  103. $this->tranParams[] = "/pad/{$is}";
  104. }
  105. /**
  106. * 填充颜色,缺省为白色,需设置为十六进制 RGB 格式(如 #FF0000),详情参考 RGB 编码表,需经过 URL 安全的 Base64 编码,默认值为 #3D3D3D
  107. * @param $rgb
  108. */
  109. public function color($rgb) {
  110. $rgb = $this->ciBase64($rgb);
  111. $this->tranParams[] = "/color/{$rgb}";
  112. }
  113. /**
  114. * 当处理参数中携带此参数时,针对文件过大、参数超限等导致处理失败的场景,会直接返回原图而不报错
  115. */
  116. public function ignoreError() {
  117. $this->tranParams[] = "/ignore-error/1";
  118. }
  119. /**
  120. * 普通裁剪参数说明 操作名称:cut
  121. * @param $width
  122. * @param $height
  123. * @param $dx
  124. * @param $dy
  125. */
  126. public function cut($width, $height, $dx, $dy) {
  127. $this->tranParams[] = "/cut/" . $width . "x" . "$height" . "x" . $dx . "x" . $dy;
  128. }
  129. /**
  130. * 指定目标图片宽度为 Width,高度不变。Width 取值范围应大于0,小于原图宽度
  131. * @param $width
  132. * @param string $gravity 指定操作的起点位置
  133. */
  134. public function cropByWidth($width, $gravity = "") {
  135. $temp = "/crop/" . $width . "x";
  136. if($gravity){
  137. $temp .= "/gravity/" . $gravity;
  138. }
  139. $this->tranParams[] = $temp;
  140. }
  141. /**
  142. * 指定目标图片高度为 Height,宽度不变。Height 取值范围应大于0,小于原图高度
  143. * @param $height
  144. * @param string $gravity 指定操作的起点位置
  145. */
  146. public function cropByHeight($height, $gravity = "") {
  147. $temp = "/crop/x" . $height;
  148. if($gravity){
  149. $temp .= "/gravity/" . $gravity;
  150. }
  151. $this->tranParams[] = $temp;
  152. }
  153. /**
  154. * 指定目标图片宽度为 Width,高度为 Height 。Width 和 Height 取值范围都应大于0,小于原图宽度/高度
  155. * @param $width
  156. * @param $height
  157. * @param string $gravity 指定操作的起点位置
  158. */
  159. public function cropByWH($width, $height, $gravity = "") {
  160. $temp = "/crop/" . $width . "x" . $height;
  161. if($gravity){
  162. $temp .= "/gravity/" . $gravity;
  163. }
  164. $this->tranParams[] = $temp;
  165. }
  166. /**
  167. * 内切圆裁剪功能,radius 是内切圆的半径,取值范围为大于0且小于原图最小边一半的整数。内切圆的圆心为图片的中心。图片格式为 gif 时,不支持该参数。
  168. * @param $radius
  169. */
  170. public function iradius($radius) {
  171. $this->tranParams[] = "/iradius/" . $radius;
  172. }
  173. /**
  174. * 圆角裁剪功能,radius 为图片圆角边缘的半径,取值范围为大于0且小于原图最小边一半的整数。圆角与原图边缘相切。图片格式为 gif 时,不支持该参数。
  175. * @param $radius
  176. */
  177. public function rradius($radius) {
  178. $this->tranParams[] = "/rradius/" . $radius;
  179. }
  180. /**
  181. * 基于图片中的人脸位置进行缩放裁剪。目标图片的宽度为 Width、高度为 Height。
  182. * @param $width
  183. * @param $height
  184. */
  185. public function scrop($width, $height) {
  186. $this->tranParams[] = "/scrop/" . $width . "x" . $height;
  187. }
  188. /**
  189. * 普通旋转:图片顺时针旋转角度,取值范围0 - 360,默认不旋转。
  190. * @param $degree
  191. */
  192. public function rotate($degree) {
  193. $this->tranParams[] = "/rotate/" . $degree;
  194. }
  195. /**
  196. * 自适应旋转:根据原图 EXIF 信息将图片自适应旋转回正。
  197. */
  198. public function autoOrient() {
  199. $this->tranParams[] = "/auto-orient";
  200. }
  201. /**
  202. * 镜像翻转:flip 值为 vertical 表示垂直翻转,horizontal 表示水平翻转
  203. * @param $flip
  204. */
  205. public function flip($flip) {
  206. $this->tranParams[] = "/flip/" . $flip;
  207. }
  208. /**
  209. * 格式转换:目标缩略图的图片格式可为:jpg,bmp,gif,png,webp,yjpeg 等,其中 yjpeg 为数据万象针对 jpeg 格式进行的优化,本质为 jpg 格式;缺省为原图格式。
  210. * @param $format
  211. */
  212. public function format($format) {
  213. $this->tranParams[] = "/format/" . $format;
  214. }
  215. /**
  216. * gif 格式优化:只针对原图为 gif 格式,对 gif 图片格式进行的优化,降帧降颜色。分为以下两种情况:
  217. * FrameNumber=1,则按照默认帧数30处理,如果图片帧数大于该帧数则截取。
  218. * FrameNumber 取值( 1,100 ],则将图片压缩到指定帧数 (FrameNumber)。
  219. * @param $frameNumber
  220. */
  221. public function gifOptimization($frameNumber) {
  222. $this->tranParams[] = "/cgif/" . $frameNumber;
  223. }
  224. /**
  225. * 输出为渐进式 jpg 格式。Mode 可为0或1。0:表示不开启渐进式;1:表示开启渐进式。该参数仅在输出图片格式为 jpg 格式时有效。如果输出非 jpg 图片格式,会忽略该参数,默认值0。
  226. * @param $mode
  227. */
  228. public function jpegInterlaceMode($mode) {
  229. $this->tranParams[] = "/interlace/" . $mode;
  230. }
  231. /**
  232. * 图片的绝对质量,取值范围0 - 100,默认值为原图质量;取原图质量和指定质量的最小值;<Quality>后面加“!”表示强制使用指定值,例如:90!。
  233. * @param $value
  234. * @param int $force
  235. */
  236. public function quality($value, $force = 0) {
  237. $temp = "/quality/" . $value;
  238. if($force){
  239. $temp .= "!";
  240. }
  241. $this->tranParams[] = $temp;
  242. }
  243. /**
  244. * 图片的最低质量,取值范围0 - 100,设置结果图的质量参数最小值。
  245. * 例如原图质量为85,将 lquality 设置为80后,处理结果图的图片质量为85。
  246. * 例如原图质量为60,将 lquality 设置为80后,处理结果图的图片质量会被提升至80。
  247. * @param $value
  248. */
  249. public function lowestQuality($value) {
  250. $this->tranParams[] = "/lquality/" . $value;
  251. }
  252. /**
  253. * 图片的相对质量,取值范围0 - 100,数值以原图质量为标准。例如原图质量为80,将 rquality 设置为80后,得到处理结果图的图片质量为64(80x80%)。
  254. * @param $value
  255. */
  256. public function relativelyQuality($value) {
  257. $this->tranParams[] = "/rquality/" . $value;
  258. }
  259. /**
  260. * 高斯模糊
  261. * @param $radius integer|float 模糊半径,取值范围为1 - 50
  262. * @param $sigma integer|float 正态分布的标准差,必须大于0
  263. */
  264. public function blur($radius, $sigma) {
  265. $this->tranParams[] = "/blur/" . $radius . "x" . $sigma;
  266. }
  267. /**
  268. * 图片亮度调节功能,value 为亮度参数值,取值范围为[-100, 100]的整数。
  269. * 取值<0:降低图片亮度。
  270. * 取值 = 0:不调整图片亮度。
  271. * 取值>0:提高图片亮度。
  272. * @param $value
  273. */
  274. public function bright($value) {
  275. $this->tranParams[] = "/bright/" . $value;
  276. }
  277. /**
  278. * 图片对比度调节功能,value 为对比度参数值,取值范围为[-100, 100]的整数。
  279. * 取值<0:降低图片对比度。
  280. * 取值 = 0:不调整图片对比度。
  281. * 取值>0:提高图片对比度。
  282. * @param $value
  283. */
  284. public function contrast($value) {
  285. $this->tranParams[] = "/contrast/" . $value;
  286. }
  287. /**
  288. * 图片锐化功能,value 为锐化参数值,取值范围为10 - 300间的整数(推荐使用70)。参数值越大,锐化效果越明显。
  289. * @param $value
  290. */
  291. public function sharpen($value) {
  292. $this->tranParams[] = "/sharpen/" . $value;
  293. }
  294. /**
  295. * 将图片设置为灰度图。 value 取值为0表示不改变图片。 value 取值为1表示将图片变为灰度图。
  296. * @param $value
  297. */
  298. public function grayscale($value) {
  299. $this->tranParams[] = "/grayscale/" . $value;
  300. }
  301. /**
  302. * 去除图片元信息,包括 exif 信息
  303. */
  304. public function strip() {
  305. $this->tranParams[] = "/strip";
  306. }
  307. /**
  308. * 限制图片转换后的大小,支持以兆字节(m)和千字节(k)为单位
  309. * 1. 仅支持 JPG 格式的图片,可以用于限制处理后图片的大小
  310. * 2. 若在尾部加上!,表示用处理后的图片大小与原图大小做比较,如果处理后的图片比原图小,则返回处理后的图片,否则返回原图。例如:examplebucket-1250000000.cos.ap-shanghai.myqcloud.com/picture.jpg?imageMogr2/size-limit/15k!
  311. * 3. 建议搭配strip参数使用,去除图片的一些冗余信息,会有更好的效果。例如:examplebucket-1250000000.cos.ap-shanghai.myqcloud.com/picture.jpg?imageMogr2/strip/format/png/size-limit/15k!
  312. * @param $value
  313. * @param int $compare
  314. */
  315. public function sizeLimit($value, $compare = 0) {
  316. $temp = "/size-limit/" . $value;
  317. if($compare){
  318. $temp .= "!";
  319. }
  320. $this->tranParams[] = $temp;
  321. }
  322. public function queryString() {
  323. if($this->tranParams) {
  324. $this->tranString = "imageMogr2" . implode("", $this->tranParams);
  325. }
  326. return $this->tranString;
  327. }
  328. public function resetRule() {
  329. $this->tranString = "";
  330. $this->tranParams = array();
  331. }
  332. }