Cài đặt PNGQuant

PNGQuant là chương trình nén ảnh mà không gây mất mát. Nó có thể nén ảnh PNG tới 80% mà không làm giảm chất lượng ảnh.  Chi tiết có thể đọc thêm tại trang web http://pngquant.org/

  1. Truy cập vào server bằng tài khoản hoặc key sau đó tìm đến thư mục tmp. cd /tmp
  1. Download các file cài đặt cần thiết về để chuẩn bị cài đặt.
    • Download pngquant-2.0.0-1.el6.i686.rpmwget http://dl.fedoraproject.org/pub/epel/6/i386/pngquant-2.0.0-1.el6.i686.rpm
    • Download libimagequant-2.0.0-1.el6.i686.rpmwget http://dl.fedoraproject.org/pub/epel/6/i386/libimagequant-2.0.0-1.el6.i686.rpm
    • Download libpng-1.2.49-1.el6_2.i686.rpmwget http://mirror.centos.org/centos/6/os/i386/Packages/libpng-1.2.49-1.el6_2.i686.rpm
  2. Sau khi tải xong các file trên ta lần lượt cài các file theo thứ tự sau.
    • Cài đặt thư viện libimagequant-2.0.0-1.el6.i686.rpm sudo yum install libimagequant-2.0.0-1.el6.i686.rpmChú ý có thể yêu cầu nhập mật khẩu thì bạn nhập hoặc tài khoản ko có quyền sudo thì cần vào httpd.conf để điều chỉnh lại cho tài khoản có quyền sudo hoặc chuyển sang một tài khoản khác có quyền sudo
      • Trong quá trình cài sẽ confirm về Is this ok [y/d/N]: bạn chọn y để tiếp tục và kết thúc.
    • Cài đặt thư viện png libpng-1.2.49-1.el6_2.i686.rpm sudo yum install libpng-1.2.49-1.el6_2.i686.rpm
      • Làm tương tự như trên chọn y và tiếp tục.
    • Cuối cùng cài đặt pngquant-2.0.0-1.el6.i686.rpm sudo yum install pngquant-2.0.0-1.el6.i686.rpm
      • Làm tương tự như trên chọn y và tiếp tục.
  3. Cài đặt hoàn thành.
    • Để kiểm tra bạn vào thư mục chứa ảnh và có ảnh đạng png và chạy lệnh pngquant --quality=65-80 file_png.png chú ý : 65-80 là min và max của chất lượng ảnh
  4. Cài đặt vào hệ thống (PHP)
    • sử dụng hàm sau. (đưa vào thư viện và gọi cho tiện và đẹp code)
      function compress_png($path_to_png_file, $max_quality = 80) {
      if (!file_exists($path_to_png_file)) {
          throw new Exception("File does not exist: $path_to_png_file");
      }
      
      // guarantee that quality won't be worse than that.
      $min_quality = 50;
      
      // '-' makes it use stdout, required to save to $compressed_png_content variable
      // '<' makes it read from the given file path
      // escapeshellarg() makes this safe to use with any path
      $compressed_png_content = shell_exec("pngquant --quality=$min_quality-$max_quality - < " . escapeshellarg($path_to_png_file));
      
      if (!$compressed_png_content) {
          throw new Exception("Conversion to compressed PNG failed. Is pngquant 1.8+ installed on the server?");
      }
      
      return $compressed_png_content;
      }