GD Library图像创建问题

时间:2011-05-11 18:41:29

标签: php jquery gd

我遇到了gd库问题。当我使用以下代码时

<script type="text/javascript">

$.fn.infiniteCarousel = function () {

    function repeat(str, num) {
        return new Array( num + 1 ).join( str );
    }

    return this.each(function () {
        var $wrapper = $('> div', this).css('overflow', 'hidden'),
            $slider = $wrapper.find('> ul'),
            $items = $slider.find('> li'),
            $single = $items.filter(':first'),

            singleWidth = $single.outerWidth(), 
            visible = Math.ceil($wrapper.innerWidth() / singleWidth), // note: doesn't include padding or border
            currentPage = 1,
            pages = Math.ceil($items.length / visible);            


        // 1. Pad so that 'visible' number will always be seen, otherwise create empty items
        if (($items.length % visible) != 0) {
            $slider.append(repeat('<li class="empty" />', visible - ($items.length % visible)));
            $items = $slider.find('> li');
        }

        // 2. Top and tail the list with 'visible' number of items, top has the last section, and tail has the first
        $items.filter(':first').before($items.slice(- visible).clone().addClass('cloned'));
        $items.filter(':last').after($items.slice(0, visible).clone().addClass('cloned'));
        $items = $slider.find('> li'); // reselect

        // 3. Set the left position to the first 'real' item
        $wrapper.scrollLeft(singleWidth * visible);

        // 4. paging function
        function gotoPage(page) {
            var dir = page < currentPage ? -1 : 1,
                n = Math.abs(currentPage - page),
                left = singleWidth * dir * visible * n;

            $wrapper.filter(':not(:animated)').animate({
                scrollLeft : '+=' + left
            }, 500, function () {
                if (page == 0) {
                    $wrapper.scrollLeft(singleWidth * visible * pages);
                    page = pages;
                } else if (page > pages) {
                    $wrapper.scrollLeft(singleWidth * visible);
                    // reset back to start position
                    page = 1;
                } 

                currentPage = page;
            });                

            return false;
        }

        $wrapper.after('<a class="arrow back">&lt;</a><a class="arrow forward">&gt;</a>');

        // 5. Bind to the forward and back buttons
        $('a.back', this).click(function () {
            return gotoPage(currentPage - 1);                
        });

        $('a.forward', this).click(function () {
            return gotoPage(currentPage + 1);
        });

        // create a public interface to move to a specific page
        $(this).bind('goto', function (event, page) {
            gotoPage(page);
        });
    });  
};

$(document).ready(function () {
  $('.infiniteCarousel').infiniteCarousel();

  $("a.pictureThumb").fancybox({
        'autoScale'     : true,
        'autoDimension' : true,
        'transitionIn'  :   'elastic',
        'transitionOut' :   'elastic',
        'speedIn'       :   300, 
        'speedOut'      :   200, 
        'hideOnOverlayClick' : true, 
        'hideOnContentClick': false 
    });
});
</script>

将此作为图像生成器,唯一出现的就是编程代码而不是图像。这个脚本使用了不同的滚动条,但是由于我放了这个新的滚动脚本(如上所示),我遇到了生成图像的问题(IE只显示了加载图标),FireFox实际上显示了编程代码。

以下是调用GD函数的代码:

<div class="infiniteCarousel">
  <div class="wrapper">
        <ul>
          <?php 
      do { ?>
          <li><a class="pictureThumb" href="picture.php?imgID=<?php $pieces = explode('_', $row_rsPictures['PictureFile']); echo $pieces[0]."_".$pieces[1]."_".$pieces[2]; if ($pieces[3] == "NN"){ echo "_NN_".$pieces[4]."_".$pieces[5];; } else { echo "_".$pieces[3]."_".$pieces[4]; } ?>&thumb=Y" title="&lt;a href=&#x27;addToCart.php?T=Pic?ID=<?php echo $row_rsPictures['PictureID']; ?>&#x27; target=&#x27;_parent&#x27; style=&#x27;color:#fe6d00&#x27;  &gt;Add This Image To Your Shopping Cart&lt;/a&gt;<br><?php echo $row_rsPictures['BoatName'];if($row_rsPictures['BoatNumber'] != "") {
                                     echo " #".$row_rsPictures['BoatNumber'];
                                     } ?><br>driven by: <?php echo $row_rsPictures['DriverName']; ?> at the <?php
                  $AssocName_array = explode('_', $row_rsPictures['Acronym']);
                  $AssocName = $AssocName_array[0];
                  if ($AssocName == "Various") {
                    $AssocName = "";
                    }            
                  if ($row_rsPictures['DateTo'] != ""){
                  $EventYear = date("Y", strtotime($row_rsPictures['DateTo']));
                  }
                    else { $EventYear = "";
                    }
                  echo $EventYear." ".$AssocName." ".$row_rsPictures['EventName'];?><br>Picture Viewed (<?php echo $row_rsPictures['Views']; ?>) since posted on <?php echo date("n-j-Y", strtotime($row_rsPictures['DatePosted'])); ?>" rel="group">
            <img src="../images/gallery/<?php $raceYear = explode('_', $row_rsPictures['EventOverlay']); echo $raceYear[0]; ?>/<?php echo $row_rsPictures['EventOverlay']; ?>/thumb/<?php echo $row_rsPictures['PictureFile']; ?>.jpg" alt="FileName: <?php echo $row_rsPictures['PictureFile'];?>"></a></li>
          <?php  
          } while ($row_rsPictures = mysql_fetch_assoc($rsPictures));
          mysql_data_seek($rsPictures, 0);
          ?>
        </ul>
      </div>
  </div>

和生成图像的单独php文件。

<?php  
$filename = explode("_", $_GET['imgID']);
$folder = $filename[0];
$subFolder = $filename[0]."_".$filename[1]."_".$filename[2];
if($filename[3] == "NN") {
    $subFolder = $subFolder."_NN";
    }
$shot = "../images/gallery/".$folder."/".$subFolder."/".$_GET['imgID'].".jpg";
$watermark = "../images/gallery/watermark.png";

header("Content-type: image/jpg");
$photoImage = ImageCreateFromJPEG($shot); 
ImageAlphaBlending($photoImage, true); 
$logoImage2 = ImageCreateFromPNG($watermark);

$im = imagecreatetruecolor(800, 16);
$im2 = imagecreatetruecolor(800, 10);
$white = imagecolorallocate($im, 255, 255, 255);
//imagefilledrectangle($photoImage, 0, 0, 796, 15, $white);
$grey = imagecolorallocate($im2, 128, 128, 128);
$red = imagecolorallocate($im2, 255, 0, 0);
//$im = imagecreatetruecolor(796, 25);
$text = $_GET['imgID'];
$text2 = 'COPYRIGHT 1997 - 2011 - DRAGBOATS.COM - ALL RIGHTS RESERVED';
$text3 = '^ THIS BAR WILL NOT APPEAR ON PURCHASED PRINTS ^';
//$black = imagecolorallocate($photoImage, 0, 0, 0);
imagestring($im, 2, 10, 1, $text, $white);
imagestring($im, 2, 440, 1, $text2, $white);
imagestring($im2, 1, 290, 1, $text3, $white);

ImageCopy($photoImage, $im, 0, 0, 0, 0, 800, 16);
ImageCopy($photoImage, $im2, 0, 17, 0, 0, 800, 10);
ImageCopy($photoImage, $logoImage2, 0, 0, 0, 0, 800, 525); 

ImageJPEG($photoImage); // output to browser 

ImageDestroy($photoImage); 
ImageDestroy($logoImage2);
?>

某处存在导致问题的冲突,我无法找到它。

感谢任何帮助。

可以在http://randykrohn.com/gallery/pictures_test.php?BoatID=881

找到实际页面

3 个答案:

答案 0 :(得分:0)

您似乎将原始图像数据(.jpg中的字节)文件输出到图库弹出窗口,其中包含一个不合适的标题,以便将imgae解释为文本而不是图像。

如果“......对GD功能的调用”下的最后一段代码都在一个文件中,那就可以解释原因。您正在输出一大块html,然后是原始图像数据,然后将其插入到图库弹出窗口中。您已经输出了一些html,Content-type标题无法生效。如果您检查错误日志(和/或实际启用错误/警告),您无疑会看到PHP中通常的“无法修改标题,从XXX行开始输出”警告。

答案 1 :(得分:0)

尝试在php.ini文件中将php内存限制设置为96M(128M - 推荐)。如果您无权访问该文件,只需将ini_set('memory_limit', '128M');添加到您的php文件即可。它必须有助于解决这个问题。

答案 2 :(得分:0)

没有帮助,但我自己想出来了。需要告诉FancyBox明确地打开链接作为图像(即:fancybox({'type':'image'});现在好了!谢谢你们帮助你们!