Image.class.php 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899
  1. <?php
  2. namespace KIF;
  3. use KIF\Data\ResultWrapper;
  4. class Image {
  5. /**
  6. * @desc 缩放图片
  7. * @param string $src 图片源地址(全路径)
  8. * @param int $dst_w 目标宽度
  9. * @param int $dst_h 目标高度
  10. * @param string $dst 目标地址(全路径) 如果指定,则把缩放后的图片直接写入到$dst指定的路径;否则则返回图片的二进制值
  11. * @param boolean $isHold 是否锁定原图的高宽比。如果false(不锁定),则严格按照指定的$dst_w和$dst_h生成新的图片
  12. * @param string $format 缩放后图片的格式。如果不指定,则使用原图的格式
  13. * @return InternalResultTransfer
  14. */
  15. static function resize($src, $dst_w, $dst_h, $dst = null, $isHold = false, $format = null) {
  16. if (empty($src)) {
  17. return ResultWrapper::fail("请指定原图");
  18. }
  19. if (!file_exists($src)) {
  20. return ResultWrapper::fail("{$src} 该图片文件不存在");
  21. }
  22. $objImagick = new \Imagick();
  23. $objImagick ->readImage($src);
  24. if ($isHold) {
  25. $src_h = $objImagick->getImageHeight();
  26. $src_w = $objImagick->getImageWidth();
  27. /// 源图片比目标图片要小
  28. if ($src_w < $dst_w && $src_h < $dst_h) {
  29. $hratio = $dst_h / $src_h;
  30. $wratio = $dst_w / $src_w;
  31. $ratio = $hratio < $wratio ? $hratio : $wratio;
  32. $dst_h = $src_h * $ratio;
  33. $dst_w = $src_w * $ratio;
  34. $isHold = false;
  35. }
  36. }
  37. $objImagick->resizeImage($dst_w, $dst_h, \Imagick::FILTER_UNDEFINED, 1, $isHold);
  38. if (is_null($format)) {
  39. $format = $objImagick->getImageFormat();
  40. }
  41. $objImagick->setImageFormat($format);
  42. if (is_null($dst)) {// 返回图像内容
  43. $data = $objImagick->getImageBlob();
  44. $ret = ResultWrapper::success($data);
  45. } else {
  46. $tmpWriteResult = $objImagick->writeImage($dst);
  47. if ($tmpWriteResult) {
  48. $ret = ResultWrapper::success(array(
  49. 'w' => $objImagick->getImageWidth(),
  50. 'h' => $objImagick->getImageHeight(),
  51. ));
  52. } else {
  53. $ret = ResultWrapper::fail("写入目标地址失败");
  54. }
  55. }
  56. $objImagick->destroy();
  57. return $ret;
  58. }
  59. /**
  60. * @desc 图片格式转换
  61. * @param string $source 源图地址
  62. * @param string $destina 保存地址
  63. * @param sring $format 保存格式 (JPG、JPEG、PNG)
  64. * @return ResultWrapper
  65. */
  66. static public function transformFormat($source, $destina = null, $format) {
  67. if (empty($source)) {
  68. return ResultWrapper::fail('请指定原图路径');
  69. }
  70. if (empty($format)) {
  71. return ResultWrapper::fail('请指定图片保存的格式');
  72. }
  73. $objImagick = new \Imagick();
  74. $objImagick->readimage($source);
  75. $objImagick->setformat($format);
  76. if ($destina === null) {
  77. $data = $objImagick->getImageBlob();
  78. $result = ResultWrapper::success($data);
  79. } else {
  80. if ($objImagick->writeImage($destina)) {
  81. $result = ResultWrapper::success();
  82. }
  83. }
  84. return $result;
  85. }
  86. }