2011-07-26 17 views
-3

ok。私はそのようなある変数から別の変数への画像のサイズ変更

$ IMG = imagecreatefromjpeg($ SRCFILE)を作成するものであると考え、実際に絵

ある変数を持っています。

イメージの幅を550に変更したいのですが、同じままにする必要がある縦横比は失われません。

次に、残りのコードがテキストなどの挿入を行うように、結果のイメージを変数に再登録する必要があります。

サイトのdemotivation-fakepostersなどを作りたいですか?

ロシア人からいくつかのコードが見つかりましたが、すべて機能しますが、サイズ変更が機能しないため、DataLife Engineとコードを使用してサイト全体がポスターとユーザーの生成と投稿に同意するようにしました。

ここでは

(すべてのためだけではなく、意味、彼らは巨大である場合は画像を削減)にいくつかの小さな象形文字がありますされるが、これはロシアのキリル文字のアルファベットによるものです。 if (oldwidth > oldheight) ratio = newwidth/oldwidth else ratio = newheight/oldheight

<?php 

    if (!defined("DATALIFEENGINE")) 
    { 
    die("Hacking Attemp!"); 
    } 

    function win_to_utf($s) 
{ 
for($i=0, $m=strlen($s); $i<$m; $i++) 
{ 
$c=ord($s[$i]); 
if ($c<=127) 
{$t.=chr($c); continue; } 
if ($c>=192 && $c<=207) 
{$t.=chr(208).chr($c-48); continue; } 
if ($c>=208 && $c<=239) 
{$t.=chr(208).chr($c-48); continue; } 
if ($c>=240 && $c<=255) 
{$t.=chr(209).chr($c-112); continue; } 
if ($c==184) { $t.=chr(209).chr(209); 
continue; }; 
if ($c==168) { $t.=chr(208).chr(129); 
continue; }; 
} 
return $t; 
} 
    $dirdem=ROOT_DIR.'/uploads/demotivation/'; 
$tpl->load_template('demgen.tpl'); 
if (isset($_FILES["file"])){ 
$myfile = $_FILES["file"]["tmp_name"]; 
$font = str_replace ("\\", "/", getcwd())."/arial.ttf"; 
$font1 = $font; 
$headerSize = 33.5; 
$textSize = 24.0; 
$imageMargin = 20; 
    $spacing = 16; 
    $borderPad = 16; 
$srcFile = $myfile; 

$header = win_to_utf($_POST["head"]); 
    $text = win_to_utf($_POST["text"]); 
if(!file_exists($srcFile)){ 
    echo "picture file not found\n"; 
    exit; 
    } 
    $img = imagecreatefromjpeg($srcFile); 
    list($w, $h) = getimagesize($srcFile); 

    $ha1 = imagettfbbox($headerSize, 0, $font1, $header); 
    $ha2 = imagettfbbox($textSize, 0,$font, $text); 

    $wt1 = $ha1[2]-$ha1[0]; 
    $ht1 = $ha1[1]-$ha1[7]; 
    $wt2 = $ha2[2]-$ha2[0]; 
    $ht2 = $ha2[1]-$ha2[7]; 

    $fw = $w + 8 + $imageMargin * 2 + $borderPad * 2; 
    $fh = $h + 8 + $imageMargin * 2 + $borderPad * 2 + $ht1 + $ht2 + $spacing * 3; 
    $fon = imagecreatetruecolor($fw, $fh); 

    $white = imagecolorallocate($fon, 255, 255, 255); 
    $black = imagecolorallocate($fon, 0, 0, 0); 
    imagefill($fon, 0, 0, $black); 

    imagecopy($fon, $img, $imageMargin + $borderPad + 4, $imageMargin + $borderPad + 4, 0, 0, $w, $h); 

    imagerectangle($fon, $imageMargin + $borderPad + 4 - 3, $imageMargin + $borderPad + 4 - 3, 
      $imageMargin + $borderPad + $w + 4 + 2, $imageMargin + $borderPad + $h + 4 + 2, $white); 
    imagerectangle($fon, $imageMargin + $borderPad + 4 - 4, $imageMargin + $borderPad + 4 - 4, 
      $imageMargin + $borderPad + $w + 4 + 3, $imageMargin + $borderPad + $h + 4 + 3, $white); 

    imagettftext($fon, $headerSize, 0, 
    ($fw - $wt1)/2, $imageMargin + $borderPad*2 + 8 + $h + $ht1 + $spacing, 
    $white, $font1, $header); 

    imagettftext($fon, $textSize, 0, 
    ($fw - $wt2)/2, $imageMargin + $borderPad*2 + 8 + $h + $ht1 + $ht2 + $spacing*2, 
    $white, $font, $text); 
$ts=$dirdem.time(); 
$ts1='/uploads/demotivation/'.time(); 
    imagejpeg($fon, $ts."_demotiv.jpg", 98); 
    imagecolordeallocate($fon, $black); 
    imagecolordeallocate($fon, $white); 
    imagedestroy($fon); 
$output=$ts1."_demotiv.jpg"; 
$wdr= <<<HTML 
<center> 
    <form enctype="multipart/form-data"> 
     <tr><td width="120" height="30"><span style="font-size: xx-small;">» Ïðÿìàÿ ññûëêà:</span></td><td><input type="text" name="head" value="http://{$_SERVER['HTTP_HOST']}{$output}" style="border:1px solid #ccc;height:16px;width:300px;padding-left:5px;"></td></tr> 
    <tr><td width="120" height="40"><span style="font-size: xx-small;">» Êîä äëÿ ôîðóìà:</span></td><td><input type="text" name="head" value="[img]http://{$_SERVER['HTTP_HOST']}{$output}[/img]" style="border:1px solid #ccc;height:16px;width:300px;padding-left:5px;"></td></tr> 
    <tr><td width="120" height="30"><span style="font-size: xx-small;">» HTML-êîä:</span></td><td><input type="text" name="head" value="&lt;img src=&quot;http://{$_SERVER['HTTP_HOST']}{$output}&quot;&gt;" style="border:1px solid #ccc;height:16px;width:300px;padding-left:5px;"></td></tr> 
</form> 
</center> 
HTML; 
} else { 
$wdr = <<<HTML 
<center> 
    <form method="post" enctype="multipart/form-data"> 
<tr><td width="120" height="40"><span style="font-size: xx-small;">» <b>Øàã 1:</b> Èçîáðàæåíèå:</span></td><td><input type="file" name="file"></td></tr> 
<tr><td width="120" height="30"><span style="font-size: xx-small;">» <b>Øàã 2:</b> Íàäïèñü ââåðõó:</span></td><td><input type="text" value="Ââåäèòå íàäïèñü..." onblur="if(this.value=='') this.value='Ââåäèòå íàäïèñü...';" onfocus="if(this.value=='Ââåäèòå íàäïèñü...') this.value='';" name="head" style="border:1px solid #ccc;height:16px;width:165px;padding-left:5px;"></td></tr> 
<tr><td width="120" height="30"><span style="font-size: xx-small;">» <b>Øàã 3:</b> Íàäïèñü âíèçó:</span></td><td><input type="text" value="Ââåäèòå íàäïèñü..." onblur="if(this.value=='') this.value='Ââåäèòå íàäïèñü...';" onfocus="if(this.value=='Ââåäèòå íàäïèñü...') this.value='';" name="text" style="border:1px solid #ccc;height:16px;width:165px;padding-left:5px;" value=""></td></tr> 
</table><br> 
<center><input type="submit" name="submit" value="Ñîçäàòü" style="border:1px solid #ccc;height:22px;width:200px;padding-left:5px;"></center> 
</form> 
</center> 
HTML; 

} 
$tpl->set('{cnt}', $wdr); 

    $tpl->compile('content'); 
    $tpl->clear(); 
?> 

答えて

0

私はあなたがxまたはy軸の大きいが比の基礎として使用される割合を意味だと思います。コピーした画像の最大幅と高さを考慮する必要もあります。 PHP GD関数では、これはそうです...

$imageFilePath = '/original.jpg'; // path to original jpg 
$imageSource = imagecreatefromjpeg($imageFilePath); 
$newImageFilePath = '/new.jpg'; // path to new resized image name 
$maxWidth = 100; // the max width you allow 
$maxHeight = 100; // the max height you allow 
$imgInfo = getimagesize($imageFilePath); 
$originalWidth = (int) $imgInfo[0]; 
$originalHeight = (int) $imgInfo[1]; 
$originalType = (int) $imgInfo[2]; 
$conversionRatio = (($originalWidth > $originalHeight) ? $maxWidth/$originalWidth : $maxHeight/$originalHeight); // the important part 
$newWidth = $originalWidth * $conversionRatio; 
$newHeight = $originalHeight * $conversionRatio; 
$newImage = imagecreatetruecolor($newWidth, $newHeight); 
imagecopyresampled($newImage, $imageSource, 0, 0, 0, 0, $newWidth, $newHeight, $originalWidth, $originalHeight); 
imagejpeg($newImage, $newImageFilePath); 
+0

私は画像を保存したくありません。コードを編集できるように、サイズを変更して別の変数に書きたい – John888

関連する問題