E
E
EvgMul2016-05-27 00:53:24
PHP
EvgMul, 2016-05-27 00:53:24

How to load an image by URL using PHP, resize it and save it on your server?

Actually, the whole essence of the question fit in the title. It is required to get an image by URL and save its original and thumbnail.
I looked at the forums, but something tells me that all this can be done much easier than what is offered there. Can you please tell me the easiest way to implement this?
Thanks in advance to all who respond.

Answer the question

In order to leave comments, you need to log in

2 answer(s)
M
Max, 2016-05-27
@matios

file_get_contents() + sanchiz.net/blog/resizing-images-with-php

Z
Zhainar, 2016-05-27
@zhainar

Looking for a ready-made library, work with it.

$image = file_get_contents( $link );
file_put_contents( $dir . $filename, $image );

Here is the finished library from opencarta:
<?php
class agooImage
{
  private $file;
  private $image;
  private $info;
  public function __construct($file)
  {
    if (file_exists($file)) {
      $this->file  = $file;
      $info        = getimagesize($file);
      $this->info  = array(
        'width' => $info[0],
        'height' => $info[1],
        'bits' => $info['bits'],
        'mime' => $info['mime']
      );
      $this->image = $this->create($file);
    } //file_exists($file)
    else {
      exit('Error: Could not load image ' . $file . '!');
    }
  }
  private function create($image)
  {
    $mime = $this->info['mime'];
    if ($mime == 'image/gif') {
      return imagecreatefromgif($image);
    } //$mime == 'image/gif'
    elseif ($mime == 'image/png') {
      return imagecreatefrompng($image);
    } //$mime == 'image/png'
      elseif ($mime == 'image/jpeg') {
      return imagecreatefromjpeg($image);
    } //$mime == 'image/jpeg'
  }
  public function save($file, $quality = 90)
  {
    $info      = pathinfo($file);
    $extension = strtolower($info['extension']);
    if (is_resource($this->image)) {
      if ($extension == 'jpeg' || $extension == 'jpg') {
        imagejpeg($this->image, $file, $quality);
      } //$extension == 'jpeg' || $extension == 'jpg'
      elseif ($extension == 'png') {
        imagepng($this->image, $file);
      } //$extension == 'png'
        elseif ($extension == 'gif') {
        imagegif($this->image, $file);
      } //$extension == 'gif'
      imagedestroy($this->image);
    } //is_resource($this->image)
  }
  public function resize($width = 0, $height = 0, $default = 'i')
  {
    if (!$this->info['width'] || !$this->info['height']) {
      return;
    } //!$this->info['width'] || !$this->info['height']
    $xpos    = 0;
    $ypos    = 0;
    $scale   = 1;
    $scale_w = $width / $this->info['width'];
    $scale_h = $height / $this->info['height'];
    if ($default == 'i') {
      $prop_source = $this->info['width'] / $this->info['height'];
      $prop_output = $width / $height;
      if ($prop_source > 1 && $prop_output > 1) {
        $default = 'w';
      } //$prop_source > 1 && $prop_output > 1
      if ($prop_source > 1 && $prop_output < 1) {
        $default = 'h';
      } //$prop_source > 1 && $prop_output < 1
      if ($prop_source < 1 && $prop_output > 1) {
        $default = 'w';
      } //$prop_source < 1 && $prop_output > 1
      if ($prop_source < 1 && $prop_output < 1) {
        $default = 'h';
      } //$prop_source < 1 && $prop_output < 1
    } //$default == 'i'
    if ($default == 'w') {
      $scale = $scale_w;
    } //$default == 'w'
    elseif ($default == 'h') {
      $scale = $scale_h;
    } //$default == 'h'
    else {
      $scale = min($scale_w, $scale_h);
    }
    if ($scale == 1 && $scale_h == $scale_w && $this->info['mime'] != 'image/png') {
      return;
    } //$scale == 1 && $scale_h == $scale_w && $this->info['mime'] != 'image/png'
    $new_width   = ceil($this->info['width'] * $scale);
    $new_height  = ceil($this->info['height'] * $scale);
    $xpos        = floor(($width - $new_width) / 2);
    $ypos        = floor(($height - $new_height) / 2);
    $image_old   = $this->image;
    $this->image = imagecreatetruecolor($width, $height);
    if (isset($this->info['mime']) && $this->info['mime'] == 'image/png') {
      imagealphablending($this->image, false);
      imagesavealpha($this->image, true);
      $background = imagecolorallocatealpha($this->image, 255, 255, 255, 127);
      imagecolortransparent($this->image, $background);
    } //isset($this->info['mime']) && $this->info['mime'] == 'image/png'
    else {
      $background = imagecolorallocate($this->image, 255, 255, 255);
    }
    imagefilledrectangle($this->image, 0, 0, $width, $height, $background);
    imagecopyresampled($this->image, $image_old, $xpos - 1, $ypos - 1, 0, 0, $new_width + 3, $new_height + 3, $this->info['width'], $this->info['height']);
    imagedestroy($image_old);
    $this->info['width']  = $width;
    $this->info['height'] = $height;
  }
  public function watermark($file, $position = 'bottomright')
  {
    $watermark        = $this->create($file);
    $watermark_width  = imagesx($watermark);
    $watermark_height = imagesy($watermark);
    switch ($position) {
      case 'topleft':
        $watermark_pos_x = 0;
        $watermark_pos_y = 0;
        break;
      case 'topright':
        $watermark_pos_x = $this->info['width'] - $watermark_width;
        $watermark_pos_y = 0;
        break;
      case 'bottomleft':
        $watermark_pos_x = 0;
        $watermark_pos_y = $this->info['height'] - $watermark_height;
        break;
      case 'bottomright':
        $watermark_pos_x = $this->info['width'] - $watermark_width;
        $watermark_pos_y = $this->info['height'] - $watermark_height;
        break;
    } //$position
    imagecopy($this->image, $watermark, $watermark_pos_x, $watermark_pos_y, 0, 0, 120, 40);
    imagedestroy($watermark);
  }
  public function crop($top_x, $top_y, $bottom_x, $bottom_y)
  {
    $image_old   = $this->image;
    $this->image = imagecreatetruecolor($bottom_x - $top_x, $bottom_y - $top_y);
    imagecopy($this->image, $image_old, 0, 0, $top_x, $top_y, $this->info['width'], $this->info['height']);
    imagedestroy($image_old);
    $this->info['width']  = $bottom_x - $top_x;
    $this->info['height'] = $bottom_y - $top_y;
  }
  public function rotate($degree, $color = 'FFFFFF')
  {
    $rgb                  = $this->html2rgb($color);
    $this->image          = imagerotate($this->image, $degree, imagecolorallocate($this->image, $rgb[0], $rgb[1], $rgb[2]));
    $this->info['width']  = imagesx($this->image);
    $this->info['height'] = imagesy($this->image);
  }
  private function filter($filter)
  {
    imagefilter($this->image, $filter);
  }
  private function text($text, $x = 0, $y = 0, $size = 5, $color = '000000')
  {
    $rgb = $this->html2rgb($color);
    imagestring($this->image, $size, $x, $y, $text, imagecolorallocate($this->image, $rgb[0], $rgb[1], $rgb[2]));
  }
  private function merge($file, $x = 0, $y = 0, $opacity = 100)
  {
    $merge        = $this->create($file);
    $merge_width  = imagesx($image);
    $merge_height = imagesy($image);
    imagecopymerge($this->image, $merge, $x, $y, 0, 0, $merge_width, $merge_height, $opacity);
  }
  private function html2rgb($color)
  {
    if ($color[0] == '#') {
      $color = substr($color, 1);
    } //$color[0] == '#'
    if (strlen($color) == 6) {
      list($r, $g, $b) = array(
        $color[0] . $color[1],
        $color[2] . $color[3],
        $color[4] . $color[5]
      );
    } //strlen($color) == 6
    elseif (strlen($color) == 3) {
      list($r, $g, $b) = array(
        $color[0] . $color[0],
        $color[1] . $color[1],
        $color[2] . $color[2]
      );
    } //strlen($color) == 3
    else {
      return false;
    }
    $r = hexdec($r);
    $g = hexdec($g);
    $b = hexdec($b);
    return array(
      $r,
      $g,
      $b
    );
  }
}
?>

Didn't find what you were looking for?

Ask your question

Ask a Question

731 491 924 answers to any question