Heim  >  Artikel  >  Backend-Entwicklung  >  So verwenden Sie ImageMagick zum Generieren von Base64-Bildern in PHP (Code)

So verwenden Sie ImageMagick zum Generieren von Base64-Bildern in PHP (Code)

不言
不言Original
2018-09-13 17:34:073960Durchsuche

Der Inhalt dieses Artikels befasst sich mit der Verwendung von ImageMagick zum Generieren von Base64-Bildern (Code) in PHP. Ich hoffe, dass er für Sie hilfreich ist.

In aktuellen PHP-Projekten müssen Zeichnungs- und Bildspleißeffekte verwendet werden. Hier sind einige Punkte, die im Entwicklungsprozess verwendet wurden, und einige aufgetretene Fallstricke. Generieren Sie mit ImageMagick das Base64-Bildformat zur Verwendung durch das Frontend.

Einige erforderliche Wissenspunkte

PHP konvertiert Bilder in Base64-Kodierung und Base64-Bilder in Bilder und speichert den Code

Konvertiert Bilder in Base64-Kodierung

/*图片转换为 base64格式编码*/
$img = 'uploads/about.png';
$base64_img = base64EncodeImage($img);
echo '<img  alt="So verwenden Sie ImageMagick zum Generieren von Base64-Bildern in PHP (Code)" >';
 
function base64EncodeImage ($image_file) {
    $base64_image = '';
    $image_info = getimagesize($image_file);
    $image_data = fread(fopen($image_file, 'r'), filesize($image_file));
    $base64_image = 'data:' . $image_info['mime'] . ';base64,' . chunk_split(base64_encode($image_data));
    return $base64_image;
}

base64-Bild in Bild umgewandelt und gespeichert

/*  base64格式编码转换为图片并保存对应文件夹 */
function base64_image_content($base64_image_content,$path){
    //匹配出图片的格式
    if (preg_match('/^(data:\s*image\/(\w+);base64,)/', $base64_image_content, $result)){
        $type = $result[2];
        $new_file = $path."/".date('Ymd',time())."/";
        if(!file_exists($new_file)){
            //检查是否有该文件夹,如果没有就创建,并给予最高权限
            mkdir($new_file, 0700);
        }
        $new_file = $new_file.time().".{$type}";
        if (file_put_contents($new_file, base64_decode(str_replace($result[1], '', $base64_image_content)))){
            return '/'.$new_file;
        }else{
            return false;
        }
    }else{
        return false;
    }
}
 
echo base64_image_content($base64_img,"uploads/");

base64

Base64 ist eine Methode zur Darstellung beliebiger Binärdaten mit 64 Zeichen.
Das Prinzip von Base64 ist sehr einfach. Bereiten Sie zunächst ein Array mit 64 Zeichen vor:

['A', 'B', 'C', ... 'a', 'b', 'c', ... '0', '1', ... '+', '/']
Verarbeiten Sie dann die Binärdaten, jede Gruppe besteht aus 3 Bytes, insgesamt 3x8= 24 Bit, aufgeteilt in 4 Gruppen, jede Gruppe hat genau 6 Bits

Was passiert, wenn die zu kodierenden Binärdaten kein Vielfaches von 3 sind und am Ende 1 oder 2 Bytes übrig bleiben? Nachdem Base64 das Ende mit x00 Bytes aufgefüllt hat, fügt es am Ende der Codierung 1 oder 2 =-Zeichen hinzu, um anzugeben, wie viele Bytes aufgefüllt werden, die während der Decodierung automatisch entfernt werden.

Die Größe von JPG-Bildern ist kleiner als die von PNG
Verwenden Sie die Imagick-Klasse von PHP, um Bilder zu bedienen

Imagick-spezifische Operationen

(1) Erstellen Sie eine Basiskarte, A Bild mit einer Breite von 750 Pixel, einer Höhe von 1046 Pixel, einem weißen Hintergrund und einem JPG-Format

// 初始化一个画板
        $img =new Imagick();
        $img->newImage(750,1046,'white','jpg') ;

(2). Fügen Sie das erforderliche Bild zur Basiskarte hinzu

, sofern wir es bereits wissen die Linkadresse des Bildes, das zusammengeführt werden muss

$item_img='https://img.alicdn.com/bao/uploaded/i1/1750208593/TB1rgM3hhtnkeRjSZSgXXXAuXXa_!!0-item_pic.jpg'

第一步:实例化图片
$imgtwo = new Imagick($item_img);

第二步:设置添加图片的大小
$imgtwo->resizeImage(750,764,Imagick::FILTER_LANCZOS,1);

关于resizeImage参数说明
    bool Imagick::resizeImage ( int $columns , int $rows , int $filter , float $blur [, bool $bestfit = false ] )

参数:
  ● columns 图片的宽度
  ● rows 图片高度
  ● filter 过滤器,用于过滤图片,有高斯filte根据情况而定
  ● blur blur=1 为虚化, blur =-1 为锐化

第三步:与底图合并
$img->compositeImage($imgtwo,$imgtwo->getImageCompose(),0,0);

使用compositeImage();
    bool Imagick::compositeImage ( Imagick $composite_object , int $composite , int $x , int $y [, int $channel = Imagick::CHANNEL_ALL ] )

参数:
  ● composite_object :用于合并的图片的Imagick对象
  ● composite:合并操作,定义操作常量。 具体请查看 合并操作常量列表
  ● x:相对图像顶点左上位置(0,0)的横坐标
  ● y:相对图像顶点左上位置(0,0)的纵坐标
  ● channel:通过传入一个通道常量,来开启通道模式。为了支持多个通道,可以通过二进制运算的操作来合并多个通道常量。

到这里就可以得到一个合并的图片了
1、加一个header信息,可以直接在网页上查看图片
    header("Content-Type: img/png");
    echo $img;
2、可以把图片在指定目录中生成,在指定目录下生成为img.png
    $file="./img.png";
    $img->writeImage($file);


我这里是这样处理:
    header ( 'Content-type: ' . strtolower ($img->getImageFormat ()) );
    $type = strtolower($img->getImageFormat());
    $dest_img='/data/tmp/' . md5(microtime(true)).'.'.$type;    //要生成的图片的路径,随机生成图片名称

(3). Text auf dem Bild zusammenfügen

Text schreiben Nehmen Sie das Hinzufügen von Store-Text als Beispiel, um das Schreiben von Text Schritt für Schritt abzuschließen Schritt.

    $shop_title='测试店铺';
    // 添加店铺文字
    $drawQr = new ImagickDraw(); // 实例化ImagickDraw
    $drawQr -> setFillColor(new ImagickPixel('#999999')); // 颜色
    $drawQr -> setFontSize('24'); // 大小
    $drawQr -> setFont('../../conf/Microsoftyahei.ttf'); // 字体
    $drawQr -> setTextAlignment(Imagick::ALIGN_LEFT); // 字体方向
    // ps: Imagick::ALIGN_RIGHT 朝右边    Imagick::ALIGN_LEFT 左边   Imagick::ALIGN_CENTER 中间
    $drawQr -> setTextEncoding("utf-8"); // 字体编码
    $drawQr -> annotation(114,990,$shop_title); // 画出文字
    $img -> drawImage($drawQr);  // 画在地板上

Detaillierte Interpretation:

1. Instanziieren Sie die ImagickDraw-Klasse:

$drawQr = new ImagickDraw();

Legen Sie die Schriftgröße fest

$drawQr -> setFillColor(new ImagickPixel(&#39;#999999&#39;));

4. Schriftformat einstellen

$drawQr -> setFontSize(&#39;24&#39;);

5. Schriftrichtung festlegen

$drawQr -> setFont(&#39;../../conf/Microsoftyahei.ttf&#39;);

ps: Imagick::ALIGN_RIGHT nach rechts Imagick::ALIGN_LEFT nach links Imagick::ALIGN_CENTER Mitte

Schriftkodierung festlegen

$draw->setTextAlignment(Imagick::ALIGN_RIGHT);

7. Schriftart auf die Basiskarte schreiben

$drawQr -> setTextEncoding("utf-8");

Text schreiben dieser Ort:

Wenn das Schriftformat nicht eingestellt ist, werden chinesische Zeichen falsch analysiert

(kein Problem mit Englisch)


So verwenden Sie ImageMagick zum Generieren von Base64-Bildern in PHP (Code) (Analyse chinesischer Zeichen fehlgeschlagen)

(Schriftartformat so einstellen, dass es normal angezeigt wird)So verwenden Sie ImageMagick zum Generieren von Base64-Bildern in PHP (Code)

(4). Das endgültige Bild unserer Gruppe muss im Base64-Format an das Frontend übergeben werden, um das endgültige gespleißte Bild zu konvertieren ​​Bild auf Base64. So verwenden Sie ImageMagick zum Generieren von Base64-Bildern in PHP (Code)

$drawQr -> annotation(114,990,$shop_title);

ist ein Bild im Base64-Format.

Es ist zu beachten, dass die vom Frontend erhaltenen Base64-Daten das Wagenrücklaufzeichen

enthalten, das eine spezielle Verarbeitung erfordert, um das Bild korrekt anzuzeigen.

$base64_image

'rn'

Das endgültige zusammengeführte Bild wird erhalten, und die Größe des zusammengefügten Bildes kann angepasst werden, um unterschiedliche Bilder zu erhalten.

So verwenden Sie ImageMagick zum Generieren von Base64-Bildern in PHP (Code)Verwandte Empfehlungen:

Bilder hochladen und ImageMagick zum Generieren von Miniaturansichten verwenden

PHP zum Implementieren des Bild-Uploads und Verwenden Sie ImageMagick, um Miniaturansichten zu generieren,

Das obige ist der detaillierte Inhalt vonSo verwenden Sie ImageMagick zum Generieren von Base64-Bildern in PHP (Code). Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn