【问题标题】:Display image from curl request in html<img> tag在 html<img> 标签中显示来自 curl 请求的图像
【发布时间】:2019-11-27 21:59:12
【问题描述】:

我正在处理的网站的其中一个页面应该显示有关漫画的信息,例如封面图片。

我正在尝试显示通过 curl 请求获得的图像。

<?php
    if(isset($_GET['info'])) {
        $postedData = $_GET["info"]; //json object containing info about manga such as author/title etc.
        $info = json_decode($postedData, true);
        $mangacoverid = $info['im']; //id of the cover image that i'm getting from json object

        $ch = curl_init();
        curl_setopt($ch, CURLOPT_URL, "https://cdn.mangaeden.com/mangasimg/" . $mangacoverid); //link of API i'm using and adding cover id to it
        curl_setopt($ch, CURLOPT_HEADER, 0);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
        curl_setopt($ch, CURLOPT_BINARYTRANSFER, 1);
        $picture = curl_exec($ch);
        curl_close($ch);
        header('Content-type: image/jpeg');
        echo $picture; //displays image in browser
    }
        ?>

-一些用于测试目的的“mangacoverid”: ff/ff94bb880357b6b811bccbbfd3356c5ec41fbb184291323f0ed6a86a.jpg c1/c1b0173d8986681f23ecf5a69d26aa9dab4a04db4d40f99bed539198.jpg 0c/0cf6ebf78074e748ab2aeea3a0fcb9e0dd43040974c66e24fa46703f.jpg 5d/5dcfed2e033c2da62e7ac89367533ebbc344373c46a005e274a16785.png 18/18b1f0b13bccb594c6daf296c1f9b6dbd83783bb5ae63fe1716c9091.jpg 35/35bf6095212da882f5d2122fd547800ed993c58956ec39b5a2d52ad4.jpg

-虽然我能够在页面中显示图像,但整个页面背景变为黑色,图像位于页面中间。 (即 style="margin: 0px; background: #0e0e0e;>")。

我要做的是将图像插入 HTML 标记中,以便我可以将其放置在页面中的其他位置。

我尝试将带有“mangacoverid”的普通 CDN 链接放在标签中,但图像提供程序不允许热链接,并且会引发 403 错误。

非常感谢任何帮助!

【问题讨论】:

    标签: php html curl php-curl


    【解决方案1】:

    我测试了您的代码,当封面 ID 被硬编码时,它似乎可以正常工作。 问题可能是通过查询参数传递的 JSON 没有被正确解析(由于 URL 编码)?

    使用硬编码的封面 ID 是否可以正常工作?

    文件image.php

    <?php
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, sprintf('https://cdn.mangaeden.com/mangasimg/%s', $_GET['id']));
    curl_setopt($ch, CURLOPT_HEADER, 0);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($ch, CURLOPT_BINARYTRANSFER, 1);
    $picture = curl_exec($ch);
    curl_close($ch);
    header('Content-type: image/jpeg');
    echo $picture;
    

    在生成显示图像的页面的脚本中:

    // Assuming $info holds the decoded json for the manga
    echo(sprintf('<img src="image.php?id=%s>', $info['im']);
    

    【讨论】:

    • 感谢您的回复。 url 本身有效并返回了一张图片,但我想获取该图片并将其显示在我页面的 标记中。我通过在目录中创建一个文件(temp.jpg)来解决。我在“curl_close($ch)”之后添加了以下代码,并在之后删除了代码:“$img = imagecreatefromstring($picture); imagejpeg($img,'temp.jpg', 100);”。之后我只是在 html 中设置 来引用文件中的图像。
    • 这样做的问题是在有多个图像的页面上只会显示一个图像。
    • 您可以将脚本重命名为“image.php”,然后在输出 HTML 的脚本中执行 &lt;img src="image.php?info={jsondata}"&gt;。
    • 对于我目前的目的,我只需要每页显示一张图像(即:阅读漫画时,我只需要显示当前章节)。你能解释一下你在第二条评论中的意思吗? :)
    • 问题是,如果两个不同的用户同时加载不同的页面,就会得到错误的图片。
    【解决方案2】:

    好的,我会发布解决方案,以防万一有人碰到这个问题。

    代码与原版大体相同:只是编辑了几行如下所示。

    -我在名为“tempcover.jpg”的目录中创建了一个文件。

    -我使用函数'imagecreatefromstring($picture)'得到了图像。

    -我使用'imagejpeg($img,'tempcover.jpg', 100)'将图像保存到文件中。

    通过这样做,我可以只引用 HTML 标记中的文件并以我想要的方式显示它。

        $ch = curl_init();
        curl_setopt($ch, CURLOPT_URL, "https://cdn.mangaeden.com/mangasimg/" . $mangacoverid); //link of API i'm using and adding cover id to it
        curl_setopt($ch, CURLOPT_HEADER, 0);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
        curl_setopt($ch, CURLOPT_BINARYTRANSFER, 1);
        $picture = curl_exec($ch);
        curl_close($ch);
        $img = imagecreatefromstring($picture);
        imagejpeg($img,'tempcover.jpg', 100);
        ?>
    
    <!--HTML-->
        <img src="tempcover.jpg" alt="bruh" height="400px" width="300px">
    

    【讨论】:

    • 附言。这是一个幼稚的临时解决方案。有关正确实施,请参阅接受的答案。
    猜你喜欢
    • 2016-11-22
    • 1970-01-01
    • 2014-09-29
    • 2021-10-16
    • 2023-03-29
    • 1970-01-01
    • 2012-11-30
    • 2021-11-30
    相关资源
    最近更新 更多