Maison  >  Article  >  développement back-end  >  Explication détaillée de la façon de fusionner des images à l'aide de l'extension imagick en PHP

Explication détaillée de la façon de fusionner des images à l'aide de l'extension imagick en PHP

墨辰丷
墨辰丷original
2018-05-23 14:58:322385parcourir

Cet article présente principalement la méthode de fusion d'images à l'aide de l'extension imagick en PHP. Il analyse les étapes spécifiques et les compétences opérationnelles associées de PHP basées sur l'extension imagick sous forme d'exemples. Les amis dans le besoin peuvent s'y référer

<.>


Première étape :

// step1: 调整尺寸到 590 x 590
$a = ROOT . &#39;/&#39; . &#39;a&#39;;
// 扫描目录
$dirA = scandir($a);
$im = new Imagick;
foreach ($dirA as $item) {
// 跳过目录和缩略图
if ($item === &#39;.&#39; || $item === &#39;..&#39; || strstr($item, &#39;.db&#39;)) {
continue;
}
// 读取图片
$im->readImage($a . &#39;/&#39; . $item);
// 获取图片宽x高
$geo = $im->getImageGeometry();
if ($geo[&#39;width&#39;] === 590 && $geo[&#39;height&#39;] === 590) {
// 宽高符合,跳过
} else {
// 调整尺寸到590 x 590
im->resizeImage(590, 590, Gmagick::FILTER_UNDEFINED, 1, TRUE);
}
// 将图片保存到另一目录
$im->writeImage(ROOT . &#39;/_a/&#39; . $item);
// 释放资源
$im->destroy();
}

Deuxième étape :

// step2: 合并图片和名字
// 扫描目录
$files = scandir(ROOT . &#39;/_a&#39;);
$k = 0;
foreach ($files as $item) {
// 跳过目录和缩略图
if ($item === &#39;.&#39; || $item === &#39;..&#39; || strstr($item, &#39;.db&#39;)) {
continue;
}
// 文本图片的宽
$twidth = 570;
// 文本图片的高
$theight = 141;
// 获取图片名
$pathinfo = pathinfo($item);
$filename = $pathinfo[&#39;filename&#39;];
// 初始化图片对象
$text = new Imagick;
// 初始化绘制对象
$draw = new ImagickDraw;
// 设置字体,这里是放到网站的font下的微软雅黑
$draw->setFont(&#39;font/msyh.ttf&#39;);
// 文字大小
$draw->setFontSize(40);
// 文字颜色
$draw->setFillColor(new ImagickPixel(&#39;#000000&#39;));
// 文字对齐方式
$draw->setTextAlignment(Imagick::ALIGN_LEFT);
// 获取文字信息,主要是长宽,因为要实现在图片居中
$a = $text->queryFontMetrics($draw, $filename);
// 添加文字
$draw->annotation(($twidth - $a[&#39;textWidth&#39;]) / 2, 80, $filename);
// 建立图像
$text->newImage($twidth, $theight, new ImagickPixel(&#39;#ffffff&#39;));
// 图片格式
$text->setImageFormat(&#39;png&#39;);
// 绘制图片
$text->drawImage($draw);
// 新建一个空白图片用来做画布
$canvas = new Imagick;
$canvas->newimage(570, 661, &#39;white&#39;);
$canvas->setImageFormat(&#39;png&#39;);
// 读取图片
$pic = new Imagick;
$pic->readImage(ROOT . &#39;/_a/&#39; . $item);
$pic->scaleimage(470, 470, TRUE);
// 将图片合并到画布
$canvas->compositeImage($pic, Imagick::COMPOSITE_OVER, 50, 50);
// 将文字合并到画布
$canvas->compositeimage($text, Imagick::COMPOSITE_OVER, 0, 520);
// 保存图片到另一目录
$canvas->writeimage(ROOT . &#39;/com_a/&#39; . $item);
$k++;
echo "{$k} files proceeded.\n";
}

Rendu

Étape 3 :

// step3: 合并每20张到一页
// 扫描目录
$files = scandir(ROOT . &#39;/com_a&#39;);
// 给图片分组
$i = $j = 0;
$group = array();
foreach ($files as $item) {
  if ($item === &#39;.&#39; || $item === &#39;..&#39; || strstr($item, &#39;.db&#39;)) {
    continue;
  }
  $i++;
  $group[$j][] = $item;
  if ($i % 20 === 0) {
    $j++;
  }
}
$total = count($group);
// 按组拼接图片,A4纸尺寸,4x5的组合方式
foreach ($group as $k => $v) {
  $canvas = new Imagick;
  $canvas->newimage(2480, 3508, &#39;white&#39;);
  $canvas->setimageformat(&#39;png&#39;);
  $i = $j = 0;
  foreach ($v as $item) {
    $im = new Imagick(ROOT . &#39;/com_a/&#39; . $item);
    // 预留了150的左边距
    $x = 150 + $i * 570;
    // 130的顶边距
    $y = 130 + $j * 661;
    $canvas->compositeimage($im, Imagick::COMPOSITE_OVER, $x, $y);
    // 每4张一行
    if (($i + 1) % 4 === 0) {
      $i = 0;
      $j++;
    } else {
      $i++;
    }
  }
  $canvas->writeimage(ROOT . &#39;/merge_a/&#39; . $k . &#39;.png&#39;);
  $c = $k + 1;
  echo "Group {$c}/{$total} done.\n";
}

Rendu

Ce qui précède est l'intégralité du contenu de cet article, j'espère qu'il sera utile pour l'aide à l'apprentissage de chacun.


Recommandations associées :

Explication détaillée de l'effet de barre de progression obtenu par PHPCompétences_php

PHPUn moyen simple d'implémenter les astuces de text counter_php

php Un moyen simple d'implémenter les astuces de array paging_php

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn