如何在 php 中从 Instagram 上发布的帖子获取元数据和 exif 信息

问题描述 投票:0回答:1

从在线 exif 查看器中,我看到可以从 Instagram 上发布的帖子中检索以下信息。

[https://www.metadata2go.com/result#j=7988e771-247c-4565-84f2-cda33e42602e]

文件名 378996423_1583432815397894_4604468632574713944_n.jpg 文件大小 345 KB 文件类型 JPEG 文件类型扩展名 .jpg mime_type 图片/jpeg jfif_版本 1.01 分辨率单位 没有任何 x_分辨率 72 y_分辨率 72 xmp_工具包 Adobe XMP 核心 5.1.2 版本 1 目录项语义 基本的 目录项mime 图片/jpeg 目录项长度 54828 mpf_版本 100 图片数量 2 mp_image_flags (没有任何) mp_图像_格式 JPEG mp_图像_类型 不明确的 mp_图像_长度 54828 mp_image_start 289682 dependent_image1_entry_number 0 dependent_image2_entry_number 0 图像宽度 1440 图像高度 1800 编码过程 基线 DCT、霍夫曼编码 每个样本位数 8 颜色组件 3 y_cb_cr_sub_采样 YCbCr4:2:0 (2 2) 图片大小 1440x1800 百万像素 2.6 mp_图像2 (二进制数据54828字节) 类别 图片

所以,我想在 php 中获取所有这些元数据和 EXIF 信息。

我的职能是


public static function uploadFileToS3($fileUrl, $resize = true)
    {
        try {
            $data['status'] = false;
            $fileFromUrl = parse_url($fileUrl);
            $fileExt = pathinfo($fileFromUrl['path'], PATHINFO_EXTENSION);
            // $imgSizeArr = get_headers($fileUrl, 1);
            // //$imgSize = round($imgSizeArr["Content-Length"] / 1024, 2); // IN KB
            // $imgSize = $imgSizeArr["Content-Length"]; // IN Bytes

            // if($imgSize < CmnEnum::GOOGLE_GMB_MIN_FILE_SISE) {
            //     Log::error("Image size is too small: " . $imgSize);
            //     return false;
            // }

            $filePath = config('constants.fileStorePath.uploaded') . getCustomEnv('APP_ENV') . '/' . 'intagrams/';
            $uniqueName = date('YmdHis') . '_' . uniqid() . '.' . $fileExt;
            $fileNameWithPath = $filePath . $uniqueName;
            if (!file_exists(public_path($filePath))) {
                \File::makeDirectory(public_path($filePath), 0777, true, true);
            }
            // heicは対応していないためjpegに変換
            Log::debug("THIS IS FILE EXTENTION".print_r($fileExt,TRUE));
            if ($fileExt == 'heic') {
                $fileExt = 'jpeg';
            }
            if ($resize) {
                $resizedImage = Image::make($fileUrl)->resize(CmnEnum::GOOGLE_GMB_RECM_RES_SQUARE, CmnEnum::GOOGLE_GMB_RECM_RES_SQUARE)->encode($fileExt);
                //$compressedImage = compressImage($fileUrl, public_path($fileNameWithPath), 72); // surce image, destination image, resulation 
                $resizedImage->exif();
                $result = Storage::disk('s3')->put($fileNameWithPath, $resizedImage->__toString(), CmnEnum::AWS_S3_VISIBILITY_PUBLIC);
            } else {
                $result = Storage::disk('s3')->put($fileNameWithPath, Image::make($fileUrl)->encode($fileExt)->__toString(), CmnEnum::AWS_S3_VISIBILITY_PUBLIC);
            }
            if ($result) {
                $data['status'] = true;
                $data['fileNameWithPath'] = $fileNameWithPath;
                return $data;
            }
            Log::error("Image is not uploaded in s3");
            return $data;
        } catch (\Exception $e) {
            $data['status'] = false;
            writeCustomLog($e);
            Log::error("Image uploading to s3 failed");
            return $data;
        }
    }

在这里,

$fileUrl = (Link of Published post on Instagram)

这里我想检测多帧图像,可以在上面的信息中看到,其中number_of_images = 2

注意:我没有/无法安装 ImageMagick。

php laravel image
1个回答
0
投票

在这里,经过多次调查,我成功地找到了图像生成多帧图像的原因,在元数据和 exif 数据中,有一个属性可以通过以下链接看到,称为“number_of_images”:https://www. metadata2go.com/view-metadata

这是由 Iphone 12pro 的 Smart HDR 发生的。 https://community.blog2social.com/forum/wordpress/social-networks/google-my-business/3342-update-google-my-business

解决方案

您可以简单地调整图像大小,然后以相同的宽高比发布到 GBP。

© www.soinside.com 2019 - 2024. All rights reserved.