無損圧縮画像の心得(二)

6494 ワード

ユーザがこれまでに発熱網で参加するアップロード画像イベントは、いずれも無損圧縮処理されていない.1月にアップロードされた画像をスクリプトで処理したいのですが、Amazon_S3サービスクラスタでは、彼らが提供した簡単なAPIしか使用できません.だから、まずダウンして、圧縮処理してから、元の画像を上書きするしかありません.
複数回のデバッグを経て、最終的にphpのスクリプトを書いて処理する:詳細はここを参照する.
コードは次のとおりです.
   1:  <?php
   2:  function compress_img ($source) {
   3:      $exts = array("png","bmp","gif","pnm","tiff");
   4:      $start_time = strtotime("-30 day");
   5:      exec("s3cmd ls s3://fever38-us-static/hotdeals/{$source}/ > ./tmp.txt");
   6:      $rs = file('./tmp.txt');
   7:   
   8:      foreach($rs as $line) {
   9:          $r =  array_filter(explode(' ', $line));
  10:          if(!empty($r[0])){
  11:              $r[0] = trim($r[0]);
  12:              $time = strtotime($r[0]);
  13:          }
  14:          if(!empty($time) && $time >= $start_time){
  15:              if(!empty($r[10])){
  16:                  $img = trim($r[10]);
  17:                  $path_info = pathinfo($r[10]);
  18:                  $ext = trim($path_info["extension"]);
  19:                  $file_name = strtolower(trim($path_info["basename"]));
  20:   
  21:                  exec("s3cmd get ".$img);
  22:                  exec("cp {$file_name} /mnt/heisoo/s3/{$source}/");
  23:   
  24:                  if (in_array($ext,$exts)) {
  25:                      system("/usr/bin/optipng -o5 ".$file_name);
  26:                  }
  27:                  if ($ext == "jpg" || $ext == "jpeg") {
  28:                      system("/usr/bin/jpegoptim -o --strip-all ".$file_name);
  29:                  }
  30:                  system("s3cmd put {$file_name} {$img} --guess-mime-type --add-header 'Cache-Control:max-age=31536000' --add-header 'Expires: Thu, 01 Dec 2014 16:00:00 GMT' --acl-public");
  31:                  unlink($file_name);
  32:              }
  33:          }
  34:      }
  35:   
  36:      unlink('./tmp.txt');
  37:  }
  38:   
  39:  compress_img("promotion_main_pic");
  40:  compress_img("src_thumb");
  41:  compress_img("uploadImage");
  42:  compress_img("dialog_image");
  43:  compress_img("joinPicture");
  44:  ?>


.csharpcode, .csharpcode pre
{
font-size: small;
color: black;
font-family: consolas, "Courier New", courier, monospace;
background-color: #ffffff;
/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt
{
background-color: #f4f4f4;
width: 100%;
margin: 0em;
}
.csharpcode .lnum { color: #606060; }