1

我正在用 php 创建一个自定义博客。当用户上传一篇文章时,我对帖子中的图片有疑问。一些图像的宽度大于我博客中的主 div (740)。我想使用 php 检查图像的宽度,如果它大于 740,然后将图像重新调整为 740。

<?php
$dom = new domDocument;
$dom->loadHTML($article_content);
$dom->preserveWhiteSpace = false;
$imgs  = $dom->getElementsByTagName("img");
$links = array();

for($i=0;$i<$imgs->length;$i++){
$links[]  = $imgs->item($i)->getAttribute("width");
$image_path = $links[];
$article_source = imagecreatefromstring(file_get_contents($image_path));
$image_width = imagesx($image_source);
if($image_width > 740){$image_width = 740;}      
}   

?>

到目前为止,这是我拥有的代码。我不确定如何设置图像宽度。(图像已经具有其原始宽度) 更新:我没有尝试保存或复制图像。我正在尝试通过 php 访问 dom 并将图像宽度设置为 $image_width (所有图像)

4

2 回答 2

2

从您的代码中,我假设您正在使用 GD 库。在这种情况下,您正在寻找的是imagecopyresized()

如果图像宽度太大,这是您可能想要的示例:

$thumb = imagecreatetruecolor($newwidth, $newheight);

imagecopyresized($small_image, $image_source,
        0, 0, 0, 0, $newwidth, $newheight, $image_width, $image_height);

然后$small_image将包含图像的缩放版本。

于 2012-07-11T23:20:07.937 回答
1

如果不保存/复制图像,您将不得不将 HTML 文档中的 img 标签替换为具有 width 属性的标签。

$dom = new domDocument;
$dom->loadHTML($article_content);

$imgElements  = $dom->getElementsByTagName("img");
foreach ($imgElements as $imgElement) {

    $imgSrc = imagecreatefromstring(file_get_contents($imgElement->getAttribute("src")));

    if (imagesx($imgSrc) > 740) {

        // we replace the img tag with a new img having the desired width
        $newE = $dom->createElement('img');
        $newE->setAttribute('width', 740);
        $newE->setAttribute('src', $imgElement->getAttribute("src"));

        // replace the original img tag
        $imgElement->parentNode->replaceChild($newE, $imgElement);
    }
}

// html with "resized" images
echo $dom->saveHTML();
于 2012-07-12T02:51:55.800 回答