• Status: Solved
  • Priority: Medium
  • Security: Public
  • Views: 683
  • Last Modified:

Transform the photo into pieces (squares or rectangles)

Hi E's, I try to found the best solution, not matter if it is in imagemagick or in php, for get equal pieces of a picture like you can see in attach image.
In practice, if I have a picture width 800 * length 600, and if I want 12 pieces 4*3 (view attach image), I will get 12 pieces of 200*200 each one:
I will use get_image_size to know the size of the picture.
(variables width and length come from the get_image_size array)
$width = $width / 4; //determinate the width, it is 200px
$length = $length / 3 //determinate the length, it is 200px
Now it is the difficult part, it is give me 12 pieces 200*200 each and save in one folder of my server.

How I get the pieces of picture?

Regards, JC
pieces.png
0
Pedro Chagas
Asked:
Pedro Chagas
  • 4
  • 3
1 Solution
 
Marco GasiFreelancerCommented:
Try this: with image you find as attachement it works fine.
<?php
error_reporting(E_ALL);
$src = imagecreatefromjpeg('Your_image_name_here.jpg');
$dest = imagecreatetruecolor(200,200);
$w=200;
$h=200;
$c = 0;
for ($y = 0; $y < 3; $y++) {
    for ($x = 0; $x < 4; $x++) {
        $c++;
        imagecopy($dest, $src, 0, 0, $w*$x, $h*$y, $w, $h);
        imagejpeg($dest, $c.'.jpg', 100);
    }
}
imagedestroy($dest);
imagedestroy($src);
?>

Open in new window

image12.jpg
0
 
Pedro ChagasWebmasterAuthor Commented:
Hi @marqusG, I try your code and don't work fine.
The system create the image 1 to 12, but when I open the pieces, the pieces contain nothing! The size of each piece is about 1kb.
What is the problem?

Regards, JC
0
Cloud Class® Course: CompTIA Cloud+

The CompTIA Cloud+ Basic training course will teach you about cloud concepts and models, data storage, networking, and network infrastructure.

 
Marco GasiFreelancerCommented:
Hi, joaochagas. Have you tried my snippet as is using image attached? In my system (Windows 7) all 12 files are created, they have size of 2.68 Kb and contains the expected portion of image.I post the screenshot of my thumbnails viewed in Explorer.
If you have tried my code with your image, maybe something goes wrong with your image... How you get image?
Maybe you can post the code wich grabs your image to see if there is something wrong in it.

2010-09-10-201450.jpg
0
 
Pedro ChagasWebmasterAuthor Commented:
Hi, I post the code and attach the image I use to do the thumbs.

Regards, JC
error_reporting(E_ALL);
$src = imagecreatefromjpeg('for_puzzle.jpg');
$dest = imagecreatetruecolor(200,200);
$w=460;
$h=345;
$c = 0;
for ($y = 0; $y < 3; $y++) {
    for ($x = 0; $x < 4; $x++) {
        $c++;
        imagecopy($dest, $src, 0, 0, $w*$x, $h*$y, $w, $h);
        imagejpeg($dest, $c.'.jpg', 100);
    }
}
imagedestroy($dest);
imagedestroy($src);
?>

Open in new window

for-puzzle.jpg
0
 
Marco GasiFreelancerCommented:
In your question you said to " have a picture width 800 * length 600" but now the picture has a different dimension, so there are three cases:
1 - you resize image to obtain a picture 800x600;
2 - you change accordingly the piece's size : 460/4=115, 345/3=115
3 - you decrease the number of pieces (if picture size allows it: 460/200=2.3 so in this case you can't choose this third alternative).

Besides, in your script you set $w and $h to the picture's sizes but this is wrong. If you look at my original code, $w and $h was set to piece's size, that is 200.

At the end, if you want to use for-puzzle.jpg use attached code.

Best
<?php
error_reporting(E_ALL);
$src = imagecreatefromjpeg('for-puzzle.jpg');
$dest = imagecreatetruecolor(115,115);
$w=115;
$h=115;
$c = 0;
for ($y = 0; $y < 3; $y++) {
    for ($x = 0; $x < 4; $x++) {
        $c++;
//        echo $w*$x.",  " .$h*$x. "<br>";
        imagecopy($dest, $src, 0, 0, $w*$x, $h*$y, $w, $h);
        imagejpeg($dest, $c.'.jpg', 100);
    }
}
imagedestroy($dest);
imagedestroy($src);
?>

Open in new window

0
 
Pedro ChagasWebmasterAuthor Commented:
Hi, with 800*600 picture work well.
Why don't work with my picture 460*345?
I change $w and $h to 115!!!
I don't have always pictures with 800*600, I can have other formats!

Regards, JC
0
 
Marco GasiFreelancerCommented:
because, I'm sure, you forgot to change this line

$dest = imagecreatetruecolor(200,200);

this way

$dest = imagecreatetruecolor(115,115);


0
Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.

Join & Write a Comment

Featured Post

Free Tool: Site Down Detector

Helpful to verify reports of your own downtime, or to double check a downed website you are trying to access.

One of a set of tools we are providing to everyone as a way of saying thank you for being a part of the community.

  • 4
  • 3
Tackle projects and never again get stuck behind a technical roadblock.
Join Now