本文整理匯總了PHP中resource::queryFontMetrics方法的典型用法代碼示例。如果您正苦於以下問題:PHP resource::queryFontMetrics方法的具體用法?PHP resource::queryFontMetrics怎麽用?PHP resource::queryFontMetrics使用的例子?那麽, 這裏精選的方法代碼示例或許可以為您提供幫助。您也可以進一步了解該方法所在類resource
的用法示例。
在下文中一共展示了resource::queryFontMetrics方法的5個代碼示例,這些例子默認根據受歡迎程度排序。您可以為喜歡或者感覺有用的代碼點讚,您的評價將有助於係統推薦出更棒的PHP代碼示例。
示例1: text
/**
* 圖像添加文字
* @param string $text 添加的文字
* @param string $font 字體路徑
* @param integer $size 字號
* @param string $color 文字顏色
* @param integer $locate 文字寫入位置
* @param integer $offset 文字相對當前位置的偏移量
* @param integer $angle 文字傾斜角度
*/
public function text($text, $font, $size, $color = '#00000000', $locate = Image::IMAGE_WATER_SOUTHEAST, $offset = 0, $angle = 0)
{
//資源檢測
if (empty($this->img)) {
throw new Exception('沒有可以被寫入文字的圖像資源');
}
if (!is_file($font)) {
throw new Exception("不存在的字體文件:{$font}");
}
//獲取顏色和透明度
if (is_array($color)) {
$color = array_map('dechex', $color);
foreach ($color as &$value) {
$value = str_pad($value, 2, '0', STR_PAD_LEFT);
}
$color = '#' . implode('', $color);
} elseif (!is_string($color) || 0 !== strpos($color, '#')) {
throw new Exception('錯誤的顏色值');
}
$col = substr($color, 0, 7);
$alp = strlen($color) == 9 ? substr($color, -2) : 0;
//獲取文字信息
$draw = new ImagickDraw();
$draw->setFont(realpath($font));
$draw->setFontSize($size);
$draw->setFillColor($col);
$draw->setFillAlpha(1 - hexdec($alp) / 127);
$draw->setTextAntialias(true);
$draw->setStrokeAntialias(true);
$metrics = $this->img->queryFontMetrics($draw, $text);
/* 計算文字初始坐標和尺寸 */
$x = 0;
$y = $metrics['ascender'];
$w = $metrics['textWidth'];
$h = $metrics['textHeight'];
/* 設定文字位置 */
switch ($locate) {
/* 右下角文字 */
case Image::IMAGE_WATER_SOUTHEAST:
$x += $this->info['width'] - $w;
$y += $this->info['height'] - $h;
break;
/* 左下角文字 */
/* 左下角文字 */
case Image::IMAGE_WATER_SOUTHWEST:
$y += $this->info['height'] - $h;
break;
/* 左上角文字 */
/* 左上角文字 */
case Image::IMAGE_WATER_NORTHWEST:
// 起始坐標即為左上角坐標,無需調整
break;
/* 右上角文字 */
/* 右上角文字 */
case Image::IMAGE_WATER_NORTHEAST:
$x += $this->info['width'] - $w;
break;
/* 居中文字 */
/* 居中文字 */
case Image::IMAGE_WATER_CENTER:
$x += ($this->info['width'] - $w) / 2;
$y += ($this->info['height'] - $h) / 2;
break;
/* 下居中文字 */
/* 下居中文字 */
case Image::IMAGE_WATER_SOUTH:
$x += ($this->info['width'] - $w) / 2;
$y += $this->info['height'] - $h;
break;
/* 右居中文字 */
/* 右居中文字 */
case Image::IMAGE_WATER_EAST:
$x += $this->info['width'] - $w;
$y += ($this->info['height'] - $h) / 2;
break;
/* 上居中文字 */
/* 上居中文字 */
case Image::IMAGE_WATER_NORTH:
$x += ($this->info['width'] - $w) / 2;
break;
/* 左居中文字 */
/* 左居中文字 */
case Image::IMAGE_WATER_WEST:
$y += ($this->info['height'] - $h) / 2;
break;
default:
/* 自定義文字坐標 */
if (is_array($locate)) {
list($posx, $posy) = $locate;
$x += $posx;
//.........這裏部分代碼省略.........
示例2: imagickDrawText
/**
* 在圖片上添加驗證文字
* @param resource $image 圖片對象
* @param string $text 要添加的字符
* @return resource 圖片對象
*/
protected function imagickDrawText($image, $text)
{
$draw = new \ImagickDraw();
$draw->setFont($this->font);
$draw->setFontSize($this->height * 0.8);
$draw->setFillColor(new \ImagickPixel('#333333'));
$draw->setStrokeAntialias(true);
$draw->setTextAntialias(true);
$metrics = $image->queryFontMetrics($draw, $text);
$draw->annotation(0, $metrics['ascender'], $text);
$image->drawImage($draw);
$draw->destroy();
return $image;
}
示例3: getTextGeometry
/**
* {@inheritdoc}
*/
public function getTextGeometry($text, Drawer $drawer)
{
$metrics = $this->resource->queryFontMetrics($this->getImagickDraw($drawer), $text);
return array('width' => $metrics['textWidth'], 'height' => $metrics['textHeight']);
}
示例4: imageAddText
/**
* Add watermark text to image
*
* @param resource $image
* @param array $opt
* @return resource
*/
private function imageAddText($image, $color, $text)
{
if (osc_use_imagick()) {
$draw = new ImagickDraw();
$draw->setFillColor('black');
//$color);
$draw->setFont($this->font);
$draw->setFontSize(30);
$metrics = $image->queryFontMetrics($draw, $text);
$geometry = $image->getImageGeometry();
switch (osc_watermark_place()) {
case 'tl':
$offset['x'] = 1;
$offset['y'] = $metrics['ascender'] + 1;
break;
case 'tr':
$offset['x'] = $geometry['width'] - $metrics['textWidth'] - 1;
$offset['y'] = $metrics['ascender'] + 1;
break;
case 'bl':
$offset['x'] = 1;
$offset['y'] = $geometry['height'] - 1;
break;
case 'br':
$offset['x'] = $geometry['width'] - $metrics['textWidth'] - 1;
$offset['y'] = $geometry['height'] - 1;
break;
default:
$offset['x'] = $geometry['width'] / 2 - $metrics['textWidth'] / 2;
$offset['y'] = $geometry['height'] / 2 - $metrics['ascender'] / 2;
break;
}
$image->annotateImage($draw, $offset['x'], $offset['y'], 0, $text);
$image->setImageFormat('jpg');
} else {
// allocate text color
$color = $this->imageColorAllocateHex($image, $color);
// calculate watermark position and get full path to font file
$offset = $this->calculateOffset($image, $text);
// Add the text to image
imagettftext($image, 20, 0, $offset['x'], $offset['y'], $color, $this->font, html_entity_decode($text, null, "UTF-8"));
}
return $image;
}
示例5: text
public function text($text, $font, $size, $color = "#00000000", $locate = THINKIMAGE_WATER_SOUTHEAST, $offset = 0, $angle = 0)
{
if (empty($this->img)) {
throw new Exception("沒有可以被寫入文字的圖像資源");
}
if (!is_file($font)) {
throw new Exception("不存在的字體文件:{$font}");
}
if (is_array($color)) {
$color = array_map("dechex", $color);
foreach ($color as &$value) {
$value = str_pad($value, 2, "0", STR_PAD_LEFT);
}
$color = "#" . implode("", $color);
} else {
if (!is_string($color) || 0 !== strpos($color, "#")) {
throw new Exception("錯誤的顏色值");
}
}
$col = substr($color, 0, 7);
$alp = strlen($color) == 9 ? substr($color, -2) : 0;
$draw = new ImagickDraw();
$draw->setFont(realpath($font));
$draw->setFontSize($size);
$draw->setFillColor($col);
$draw->setFillAlpha(1 - hexdec($alp) / 127);
$draw->setTextAntialias(true);
$draw->setStrokeAntialias(true);
$metrics = $this->img->queryFontMetrics($draw, $text);
$x = 0;
$y = $metrics["ascender"];
$w = $metrics["textWidth"];
$h = $metrics["textHeight"];
switch ($locate) {
case THINKIMAGE_WATER_SOUTHEAST:
$x += $this->info["width"] - $w;
$y += $this->info["height"] - $h;
break;
case THINKIMAGE_WATER_SOUTHWEST:
$y += $this->info["height"] - $h;
break;
case THINKIMAGE_WATER_NORTHWEST:
break;
case THINKIMAGE_WATER_NORTHEAST:
$x += $this->info["width"] - $w;
break;
case THINKIMAGE_WATER_CENTER:
$x += ($this->info["width"] - $w) / 2;
$y += ($this->info["height"] - $h) / 2;
break;
case THINKIMAGE_WATER_SOUTH:
$x += ($this->info["width"] - $w) / 2;
$y += $this->info["height"] - $h;
break;
case THINKIMAGE_WATER_EAST:
$x += $this->info["width"] - $w;
$y += ($this->info["height"] - $h) / 2;
break;
case THINKIMAGE_WATER_NORTH:
$x += ($this->info["width"] - $w) / 2;
break;
case THINKIMAGE_WATER_WEST:
$y += ($this->info["height"] - $h) / 2;
break;
default:
if (is_array($locate)) {
$posy = $locate[1];
$posx = $locate[0];
$x += $posx;
$y += $posy;
} else {
throw new Exception("不支持的文字位置類型");
}
}
if (is_array($offset)) {
$offset = array_map("intval", $offset);
$oy = $offset[1];
$ox = $offset[0];
} else {
$offset = intval($offset);
$ox = $oy = $offset;
}
if ("gif" == $this->info["type"]) {
$img = $this->img->coalesceImages();
$this->img->destroy();
do {
$img->annotateImage($draw, $x + $ox, $y + $oy, $angle, $text);
} while ($img->nextImage());
$this->img = $img->deconstructImages();
$img->destroy();
} else {
$this->img->annotateImage($draw, $x + $ox, $y + $oy, $angle, $text);
}
$draw->destroy();
}