zoukankan      html  css  js  c++  java
  • 大图片生成缩略图 导致imagecreatefromjpeg 内存崩溃问题

    简介:这是大图片生成缩略图 导致imagecreatefromjpeg 内存崩溃问题的详细页面,介绍了和php,有关的知识、技巧、经验,和一些php源码等。

    class='pingjiaF' frameborder='0' src='http://biancheng.dnbcw.info/pingjia.php?id=330430' scrolling='no'>

    当图片超过1M时就可能出现以下错误 当然这个也跟你php.ini设置有关 如果你php设置里 memory_limit 16M 这个过小的话就会出现下面这个错误!

    Fatal error: Allowed memory size of 8388608 bytes exhausted (tried to allocate 3456 bytes) in

    解决方法

    ini_set("memory_limit", "60M");

    在 imagecreatefromjpeg 前动态设置大小 以解决内存不足问题

    有的服务器可能限制了这个函数的使用 ini_set() 这样的话就会既不报错 也无法生成缩略图

    所以只有联系服务器那边手动把php.ini修改一下


    相关参考

    php 中,imagecreatefromjpeg 将在内存中创建一个位图数据来操作图片,
    这需要大量的内容。一个长宽各为2000的24位图片,至少需要 2000 x 2000 x (24/8) = 12M的

    /***************** 这个计算大小的公式不知道是否准确 ****************************/


    /***************** 这里还有老外写的一个 上传时转换图片的函数 可以参考下 **********************/



    Last night I posted the following note under move_upload_file and looked tonight to see if it got into the system. I happen to also pull up imagecreatefromjpeg and got reminded of many resize scripts in this section. Unfortunately, my experience was not covered by most of the examples below because each of them assumed less than obvious requirements of the server and browser. So here is the post again under this section to help others uncover the mystery in file uploading and resizing arbitrary sized images. I have been testing for several days with hundreds of various size images and it seems to work well. Many additional features could be added such as transparency, alpha blending, camera specific knowledge, more error checking. Best of luck.

    --- from move_upload_file post ---

    I have for a couple of years been stymed to understand how to effectively load images (of more than 2MB) and then create thumbnails. My note below on general file uploading was an early hint of some of the system default limitations and I have recently discovered the final limit I offer this as an example of the various missing pieces of information to successfully load images of more than 2MB and then create thumbnails. This particular example assumes a picture of a user is being uploaded and because of browser caching needs a unique number at the end to make the browser load a new picture for review at the time of upload. The overall calling program I am using is a Flex based application which calls this php file to upload user thumbnails.

    The secret sauce is:

    1. adjust server memory size, file upload size, and post size
    2. convert image to standard formate (in this case jpg) and scale

    The server may be adjusted with the .htaccess file or inline code. This example has an .htaccess file with file upload size and post size and then inline code for dynamic system memory.

    htaccess file:
    php_value post_max_size 16M
    php_value upload_max_filesize 6M

    <?php
    // $img_base = base directory structure for thumbnail images
    // $w_dst = maximum width of thumbnail
    // $h_dst = maximum height of thumbnail
    // $n_img = new thumbnail name
    // $o_img = old thumbnail name
    function convertPic($img_base, $w_dst, $h_dst, $n_img, $o_img){

    ini_set('memory_limit', '100M'); // handle large images
    unlink($img_base.$n_img); // remove old images if present
    unlink($img_base.$o_img);
    $new_img = $img_base.$n_img;

    $file_src = $img_base."img.jpg"; // temporary safe image storage
    unlink($file_src);
    move_uploaded_file($_FILES['Filedata']['tmp_name'], $file_src);

    list($w_src, $h_src, $type) = getimagesize($file_src); // create new dimensions, keeping aspect ratio
    $ratio = $w_src/$h_src;
    if ($w_dst/$h_dst > $ratio) {$w_dst = floor($h_dst*$ratio);} else {$h_dst = floor($w_dst/$ratio);}

    switch ($type){

    case 1: // gif -> jpg
    $img_src = imagecreatefromgif($file_src);
    break;
    case 2: // jpeg -> jpg
    $img_src = imagecreatefromjpeg($file_src);
    break;
    case 3: // png -> jpg
    $img_src = imagecreatefrompng($file_src);
    break;
    }
    $img_dst = imagecreatetruecolor($w_dst, $h_dst); // resample

    imagecopyresampled($img_dst, $img_src, 0, 0, 0, 0, $w_dst, $h_dst, $w_src, $h_src);
    imagejpeg($img_dst, $new_img); // save new image

    unlink($file_src); // clean up image storage
    imagedestroy($img_src);
    imagedestroy($img_dst);
    }

    $p_id = (Integer) $_POST[uid];
    $ver = (Integer) $_POST[ver];
    $delver = (Integer) $_POST[delver];
    convertPic("your/file/structure/", 150, 150, "u".$p_id."v".$ver.".jpg", "u".$p_id."v".$delver.".jpg");

    ?>

    “大图片生成缩略图 导致imagecreatefromjpeg 内存崩溃问题”的更多相关文章 》

    爱J2EE关注Java迈克尔杰克逊视频站JSON在线工具

    http://biancheng.dnbcw.info/php/330430.html pageNo:11
  • 相关阅读:
    课堂作业02
    模仿JavaAppArguments.java示例,编写一个程序,此程序从命令行接收多个数字,求和之后输出结果。
    Feign使用Hystrix无效原因及解决方法
    解决Spring Boot 使用RedisTemplate 存储键值出现乱码 xacxedx00x05tx00
    consul怎么在windows下安装
    java运行jar命令提示没有主清单属性
    Maven parent.relativePath
    Maven的pom.xml文件结构之基本配置packaging和多模块聚合结构(微服务)
    redis开启远程访问
    kibana使用
  • 原文地址:https://www.cnblogs.com/ooooo/p/2249352.html
Copyright © 2011-2022 走看看