Answer the question
In order to leave comments, you need to log in
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
Looking for a ready-made library, work with it.
$image = file_get_contents( $link );
file_put_contents( $dir . $filename, $image );
<?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 questionAsk a Question
731 491 924 answers to any question