1

だから、元の画像を歪ませるように画像をごちゃまぜにしたいのです。つまり、これです。画像を読み込み、画像をループして 32x32 ブロックを取得し、個々のブロックを配列に格納します。次に、ブロックをランダムな順序で新しい絵として再組み立てします。

これは、元の画像からブロックを取得して保存し、画像を再構築するために現在必要なコードです(これにはまだランダム化部分がないことに注意してください)。しかし、何らかの理由で正しく出力されません。

<?php

$name = "pic.jpg";

$src = imagecreatefromjpeg($name);
list($width, $height, $type, $attr) = getimagesize($name);

$x_size = floor($width/32);
$y_size = floor($height/32);

$mixed = array();

$new_image = imagecreatetruecolor(32,32);

$x = 0;
$y = 0;

for($y = 0; $y < $height; $y+= 32) {
    for($x = 0; $x < $width; $x+=32) {
        imagecopy($new_image, $src, 0, 0, $x, $y, 32, 32); 
        array_push($mixed, $new_image);
    }
}

$final_image = imagecreatetruecolor($width, $height);

$i = 0;
$x1 = 0;
$y1 = 0;

for($i = 0; $i < sizeof($mixed); $i++) {

    $x1++;

    if($x1 >= $x_size) {
        $x1 = 0;
        $y1++;
    }

    imagecopymerge($final_image, $mixed[$i], $x1, $y1, 0,0,32,32,100); 
}

header('Content-Type: image/jpeg');
imagejpeg($final_image);

?>

元の画像:

http://puu.sh/236XS

出力:

http://puu.sh/236YO

お役に立てれば幸いです。

ありがとう。

4

1 に答える 1

0

次のコードを使用して、自分の質問を解決しました。

<?php
include("test.php");
//global variables
$name = "pic.jpg";
$size = 64;
$x = 0;
$y = 0;

$spots = array("0,0", "0,1", "0,2", "0,3",
               "1,0", "1,1", "1,2", "1,3",
               "2,0", "2,1", "2,2", "2,3",
               "3,0", "3,1", "3,2", "3,3");

//open image from file (Original image)
$src = imagecreatefromjpeg($name);
//load image details
list($width, $height, $type, $attr) = getimagesize($name);

//calculate amount of tiles on x/y axis.
$x_size = floor($width/$size);
$y_size = floor($height/$size);

$new_image = imagecreatetruecolor($size,$size);
$final_image = imagecreatetruecolor($width, $height);
$used = array();

for($y = 0; $y < $height; $y+= $size) {
    for($x = 0; $x < $width; $x+= $size) {

            //generate random x/y coordinates
            redo:
            $spot = rand(0, sizeof($spots)-1);

            if(!in_array($spot, $used)) {
                $coords = explode(",", $spots[$spot]);

                //grab 32x32 square from original image
                imagecopy($new_image, $src, 0, 0, $x, $y, $size, $size); 
                //place 32x32 square into new image at randomly generated coordinates
                imagecopy($final_image, $new_image, $coords[0]*$size, $coords[1]*$size, 0,0,$size,$size); 
                array_push($used, $spot);

            } else {
                goto redo;
            }

    }
}

//display final image

header('Content-Type: image/jpeg');
imagejpeg($final_image);

print_r($used);
?>

最も効率的なコードではないかもしれませんが、動作します:)

于 2013-02-16T02:56:48.240 に答える