Méthode PHP pour obtenir la taille et la taille de l'image distante

墨辰丷
Libérer: 2023-03-26 12:24:01
original
1973 Les gens l'ont consulté

Cet article présente principalement des informations pertinentes sur la façon d'obtenir efficacement la taille et la taille des images distantes avec PHP. J'espère que grâce à cet article, vous pourrez réaliser une telle fonction. Les amis dans le besoin pourront se référer à

<.> PHP Comment obtenir efficacement la taille et la taille des images distantes

Partagez votre expérience ici J'espère partager la technologie avec tout le monde. S'il y a des lacunes, veuillez me corriger. Le but de la rédaction de cet article est d'espérer que tout le monde puisse grandir ensemble. Je crois aussi qu'il n'y a pas de supériorité ou d'infériorité entre les technologies. Seuls la complémentation et le partage peuvent se faire grandir davantage.


Code d'implémentation :

/** 
 * 获取远程图片的宽高和体积大小 
 * 
 * @param string $url 远程图片的链接 
 * @param string $type 获取远程图片资源的方式, 默认为 curl 可选 fread 
 * @param boolean $isGetFilesize 是否获取远程图片的体积大小, 默认false不获取, 设置为 true 时 $type 将强制为 fread 
 * @return false|array 
 */ 
function myGetImageSize($url, $type = &#39;curl&#39;, $isGetFilesize = false)  
{ 
  // 若需要获取图片体积大小则默认使用 fread 方式 
  $type = $isGetFilesize ? &#39;fread&#39; : $type; 
  
   if ($type == &#39;fread&#39;) { 
    // 或者使用 socket 二进制方式读取, 需要获取图片体积大小最好使用此方法 
    $handle = fopen($url, &#39;rb&#39;); 
  
    if (! $handle) return false; 
  
    // 只取头部固定长度168字节数据 
    $dataBlock = fread($handle, 168); 
  } 
  else { 
    // 据说 CURL 能缓存DNS 效率比 socket 高 
    $ch = curl_init($url); 
    // 超时设置 
    curl_setopt($ch, CURLOPT_TIMEOUT, 5); 
    // 取前面 168 个字符 通过四张测试图读取宽高结果都没有问题,若获取不到数据可适当加大数值 
    curl_setopt($ch, CURLOPT_RANGE, &#39;0-167&#39;); 
    // 跟踪301跳转 
    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1); 
    // 返回结果 
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 
  
    $dataBlock = curl_exec($ch); 
  
    curl_close($ch); 
  
    if (! $dataBlock) return false; 
  } 
  
  // 将读取的图片信息转化为图片路径并获取图片信息,经测试,这里的转化设置 jpeg 对获取png,gif的信息没有影响,无须分别设置 
  // 有些图片虽然可以在浏览器查看但实际已被损坏可能无法解析信息  
  $size = getimagesize(&#39;data://image/jpeg;base64,&#39;. base64_encode($dataBlock)); 
  if (empty($size)) { 
    return false; 
  } 
  
  $result[&#39;width&#39;] = $size[0]; 
  $result[&#39;height&#39;] = $size[1]; 
  
  // 是否获取图片体积大小 
  if ($isGetFilesize) { 
    // 获取文件数据流信息 
    $meta = stream_get_meta_data($handle); 
    // nginx 的信息保存在 headers 里,apache 则直接在 wrapper_data  
    $dataInfo = isset($meta[&#39;wrapper_data&#39;][&#39;headers&#39;]) ? $meta[&#39;wrapper_data&#39;][&#39;headers&#39;] : $meta[&#39;wrapper_data&#39;]; 
  
    foreach ($dataInfo as $va) { 
      if ( preg_match(&#39;/length/iU&#39;, $va)) { 
        $ts = explode(&#39;:&#39;, $va); 
        $result[&#39;size&#39;] = trim(array_pop($ts)); 
        break; 
      } 
    } 
  } 
  
  if ($type == &#39;fread&#39;) fclose($handle); 
  
  return $result; 
} 
  
// 测试的图片链接 
echo &#39;<pre class="brush:php;toolbar:false">&#39;; 
$result = myGetImageSize(&#39;http://s6.mogujie.cn/b7/bao/120630/2kpa6_kqywusdel5bfqrlwgfjeg5sckzsew_345x483.jpg_225x999.jpg&#39;, &#39;curl&#39;); 
print_r($result); 
echo &#39;<hr />&#39;; 
$result = myGetImageSize(&#39;http://s5.mogujie.cn/b7/bao/120629/6d3or_kqytasdel5bgevsugfjeg5sckzsew_801x1193.jpg&#39;, &#39;fread&#39;); 
print_r($result); 
echo &#39;<hr />&#39;; 
$result = myGetImageSize(&#39;http://hiphotos.baidu.com/zhengmingjiang/pic/item/1c5f338c6d22d797503d92f9.jpg&#39;, &#39;fread&#39;, true); 
print_r($result); 
echo &#39;<hr />&#39;; 
$result = myGetImageSize(&#39;http://www.vegandocumentary.com/wp-content/uploads/2009/01/imveganlogotransparentbackground.png&#39;, &#39;curl&#39;, true); 
print_r($result);
Copier après la connexion
Recommandations associées :

HP implémente une méthode efficace pour obtenir la taille et la taille des images à distance

Comment vérifier la taille de l'image en js

Explication détaillée de la balise img et de la modification de la taille de l'image en html (image)

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Étiquettes associées:
source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!