2011-07-26 138 views
-3

ok。我有一個變量,它實際上是一個圖片將圖像從一個變量調整到另一個變量

我認爲這是創造這樣一個

$圖= imagecreatefromjpeg($ SRCFILE);

現在我想將圖像寬度調整爲550,但不會丟失需要保持不變的寬高比。

然後生成的圖像應該重新註冊到一個變量,所以其餘的代碼可以插入文本和更多。

想要使網站disotivation-fakeposters和其他人。

我發現了一些來自俄羅斯的代碼 - 一切正常,但調整大小不起作用,所以我想用DataLife引擎和代碼,使整個網站將同意海報和用戶將能夠生成和發佈。

這是(對所有手段不僅降低了圖像,如果他們是巨大的)

有一些小的象形文字,但這是由於俄羅斯的西裏爾字母。

<?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軸被用作比率的基礎:if (oldwidth > oldheight) ratio = newwidth/oldwidth else ratio = newheight/oldheight。您還需要考慮複製圖像的最大允許寬度和高度。與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

相關問題