You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用WordPress REST API显示图片问题:返回内容为字符串而非图片

解决WordPress REST API直接返回QR图片的问题

你的核心问题是设置了image/gif的响应头,但却返回了HTML字符串,这和你想要的直接输出图片流的逻辑矛盾。quickchart这类服务是直接返回图片二进制数据,浏览器根据Content-Type识别为图片并渲染,而非返回HTML标签。

修改后的代码

add_action( 'rest_api_init', function () {
    register_rest_route( 'api/v1', '/product/', array(
        'methods' => 'GET',
        'callback' => 'ea_get_product_data',
    ) );
} );

function ea_get_product_data( $data ) {
    $identifier = $data->get_param( 'identifier' );
    if ( empty( $identifier ) ) {
        return new WP_Error( 'missing_param', 'identifier参数不能为空', array( 'status' => 400 ) );
    }

    require get_template_directory() . '/inc/qr-code/qrcode.php';
    
    // 生成QR码图片
    $qr = QRCode::getMinimumQRCode($identifier, QR_ERROR_CORRECT_LEVEL_L);
    $img = $qr->createImage(8, 8, 0x000000, 0xFFFFFF, false);

    // 直接输出图片流,跳过REST响应的默认JSON处理
    header( 'Content-Type: image/gif' );
    imagegif($img);
    imagedestroy($img);
    exit;
}

关键改动说明

  1. 移除HTML标签包裹:不再用<img>标签,直接输出图片的二进制数据
  2. 直接设置响应头并输出:使用原生header()设置Content-Type,调用imagegif()直接输出图片,最后exit终止程序,避免WordPress后续的REST响应处理把输出转换成JSON字符串
  3. 增加参数校验:如果identifier为空,返回错误提示,避免生成空的QR码

调用your-site/wp-json/api/v1/product/?identifier=abc123时,浏览器会直接显示QR图片,和quickchart的效果一致。

内容的提问来源于stack exchange,提问作者Never Stop Learning

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.05 22:00:54