我正在开发一个Web项目,该项目涉及动态生成的美国地图,该地图基于一组数据着色不同的状态.
这个SVG文件给了我一张很好的美国空白地图,很容易改变每个州的颜色.困难在于IE浏览器不支持SVG,所以为了让我使用svg提供的方便语法,我需要将它转换为JPG.
理想情况下,我只想使用GD2库,但也可以使用ImageMagick.我完全不知道如何做到这一点.
将考虑允许我动态改变美国地图上的状态颜色的任何解决方案.关键是它可以很容易地改变颜色并且它是跨浏览器的.请给我PHP/Apache解决方案.
我使用CodeIgniter 1.7开发了一个照片共享社区网站.成员上传的照片会自动调整为多种格式,我使用CodeIgniter Image Manipulation类.该类内置于框架中,基本上是多个图像处理库的包装器,如GD,GD2,ImageMagick和NETPBM.在我的主机上,我只能使用GD2,所以这就是这个问题的所在.
关于我的问题.以下是我网站上已调整大小的照片示例.请注意,原件非常大,宽度超过3000像素:
http://www.jungledragon.com/image/195/female_impala_close-up.html
现在,看看同样的图像,也调整大小,在Flickr上稍大一些:
http://www.flickr.com/photos/fledder/3763538865/in/set-72157621744113979
看到戏剧性的差异?我正试图弥合这个巨大的差距.我做的第一件事是对图像应用锐化滤镜.你可以在这里看到结果:

虽然仍然不完美,但它至少接近Flickr图像的清晰度水平.剩下的问题是颜色被冲走,好像它们的饱和度降低了.这种情况发生在锐化滤镜之前,因此它必须在GD2中.
这个问题对我来说至关重要,但我不知道在哪里看.我发现一些.NET线程正在谈论色度子采样,但我不知道在我的设置中如何处理这些信息.我正在寻找在我的设置约束下工作的任何解决方案.
更新:这里是原始文件,就像我将它上传到我的网站和Flickr一样:
http://www.jungledragon.com/img/DSC07275.jpg
更新2:我很震惊.好的方式.安装ImageMagick但是在切换到它之后花了很多痛苦(这是将'imagemagick'设置为Code Igniter图像处理类使用的库的问题,测试图像的结果如下:

ImageMagick的调整大小正是按预期完成的.颜色被保留,清晰度就在那里.是的,我禁用了自定义锐化程序,因为ImageMagick不再需要它.最重要的是,这个过程更快,内存也更少.这里有另一个很大的部分:我无法解释它,但我绝对没有告诉ImageMagick使用特定的颜色配置文件,这是由用户@Alix建议的.到目前为止,在我的测试中,无论是否有嵌入的配置文件,都可以看到颜色信息.输出只是输入的较小版本.ImageMagick真的那么聪明还是我在做梦?
我有一个客户对他们的产品缩略图在Magento上呈现的方式非常不满意.
两个帐户的狡猾外观是显而易见的:
我已经删除了所有压缩,将所有质量设置为100%,刷新了图像缓存,进行了实验,破解,并将其修复了几十次,似乎没有任何效果.
这个版本的Magento是ver.1.4.2.0
有没有人在这里遇到同样的问题,如果是这样,你设法解决它?
我有一个允许用户上传图像的应用程序.我使用的测试用例是一个1.6MB的jpeg,尺寸为3872 x 2592px.后端的上传脚本会将上传的图像调整为另外6种格式:
我知道这很多但是相信我,我需要这个.我使用Code Igniter的Image Manipulation类进行调整大小,该类使用GD,GD2或ImageMagick进行调整大小.我首先将它配置为使用GD2,并注意到总调整大小过程需要11秒.
由于用户必须等待此过程,因此不可接受.经过大量阅读后,我了解到ImageMagick是一个更快更有效的操作库,所以我切换到了:
$sourceimage = $data['filedata']['file_path'] . $data['imagedata']['user_id'] . "/" . $imageid . $data['filedata']['file_ext'];
$resize_settings['image_library'] = 'imagemagick';
$resize_settings['library_path'] = '/usr/bin';
$resize_settings['source_image'] = $sourceimage;
$resize_settings['maintain_ratio'] = false;
$resize_settings['quality'] = "100%";
$this->load->library('image_lib', $resize_settings);
Run Code Online (Sandbox Code Playgroud)
令我惊讶的是,调整大小过程现在需要更长的时间:特定的15秒.
看一下我的日志,我看到每个调整大小动作需要2秒,无论它调整大小的文件格式.我想这是因为我总是从原来的大小调整,这是非常大的.
我不想将调整大小过程卸载到预定的进程,因为这会降低站点的可用性.这意味着用户必须等待几分钟才能开始查看/使用图像.
那么,有什么聪明的方法可以大大加快这个调整大小过程,以便我可以实时保存它吗?请注意:允许较小的分辨率不是一种选择,这是我正在建立的摄影网站.另外,我真的需要提到的六种格式.
我对图像缩放的讨论很感兴趣,后来发现我用来从上传的图像创建缩略图的PHP代码遇到了同样的问题.我决定尝试在底部附近发布的PHP修补程序(将伽玛值从2.2转换为1.0,调整图像大小,将伽玛值从1.0转换回2.2).这有助于解决文章中提到的问题,但是对代码的这种修改具有淘汰PNG alpha通道透明度的不幸副作用.
这是我对伽马校正的代码.
<?php
$image = imagecreatefrompng($source_file);
$resized_image = imagecreatetruecolor($new_width, $new_height);
imagealphablending($resized_image, false);
imagesavealpha($resized_image, true);
imagegammacorrect($image, 2.2, 1.0);
imagecopyresampled($resized_image, $image, 0, 0, 0, 0, $new_width, $new_height, $image_width, $image_height);
imagegammacorrect($resized_image, 1.0, 2.2);
imagepng($resized_image, $dest_file);
?>
Run Code Online (Sandbox Code Playgroud)
任何人都知道如何调整图像大小,采用伽马校正技巧,同时保持原始图像的alpha通道透明度?
样本图片:
在尝试更正伽玛之前,您可以看到透明度很好.(查看透明度的最简单方法是检查包裹在图像周围的段落标记,并通过FireBug或类似方法添加背景:black;到其样式属性.)
原始图像http://ender.hosting.emarketsouth.com/images/test-image.png 没有伽马校正http://ender.hosting.emarketsouth.com/images/test-image-resized-no-gamma.png 伽玛纠正 - 没有透明度http://ender.hosting.emarketsouth.com/images/test-image-resized.png
我正在尝试在Windows上的Apache服务器上安装pixelpost.安装程序失败,因为:
如果您的PHP安装未使用GD图形库进行编译,则Pixelpost将无法运行.
我已经将以下行添加到php.ini中
extension=php_gd2.dll
Run Code Online (Sandbox Code Playgroud)
但我仍然得到相同的错误消息.当我运行时,phpinfo()我没有看到任何GD的引用,所以我猜它确实没有安装.我搜索了php_gd2.dll它,它在ext我的PHP根目录的子文件夹中.
我对PHP一无所知,所以对我很温柔.
回答评论中提出的问题:
php.iniphp.ini 在我的PHP安装的根目录中 C:\php\php.ini我有一个功能,可以在飞行中制作网址图片缩略图!我总是传递给jpg类型的这个函数图像,但是当我传递带有".jpg"扩展名的图像时会出现问题.但是当我尝试获取它的mime类型时,我发现它的" application/octet-stream "..在这个php页面中,这个mime类型指的是其中一个
IMAGETYPE_JPC,IMAGETYPE_JPX,IMAGETYPE_JB2
我需要修改我的函数来处理这个mime类型?
注意^^^^^^
function thumb($path,$width,$height) // $path => image url
{
$file_dimensions = getimagesize($path);
$file_type = image_type_to_mime_type($file_dimensions[2]);
list($Cwidth, $Cheight) = getimagesize($path);
if ($file_type=='image/jpeg'||$file_type=='image/pjpeg'){
// Load
$thumb = imagecreatetruecolor($width, $height);
$source = imagecreatefromjpeg($path);
// Resize
imagecopyresized($thumb, $source, 0, 0, 0, 0, $width, $height, $Cwidth, $Cheight);
header('Content-Type: image/jpeg');
imagejpeg($thumb);
}
else if ($file_type=='application/octet-stream')
{
// ^^^^^ what I should write here
}
else
{
echo "Not supported type";
}
}
Run Code Online (Sandbox Code Playgroud) 我不明白如何在 linux mint 上使用 Docker 安装 gd2 库。这是我的 docker-compose 文件
version: '3'
services:
web:
build: ./web
environment:
- APACHE_RUN_USER=#1000
volumes:
- ${APP_PATH_HOST}:${APP_PATH_CONTAINER}
- ./web/php.ini:/usr/local/etc/php/php.ini
ports:
- 8080:80
working_dir: ${APP_PATH_CONTAINER}
db:
image: mariadb
restart: always
ports:
- "3306:3306"
environment:
MYSQL_ROOT_USER: root
MYSQL_ROOT_PASSWORD: 12345
MYSQL_DATABASE: books
MYSQL_USER: root
MYSQL_PASSWORD: 12345
SERVICE_TAGS: dev
SERVICE_NAME: mysql
volumes:
- ${DB_PATH_HOST}:/var/lib/mysql
adminer:
image: adminer
restart: always
ports:
- 6080:8080
composer:
image: composer:1.6
volumes:
- ${APP_PATH_HOST}:${APP_PATH_CONTAINER}
working_dir: ${APP_PATH_CONTAINER}
command: composer install
Run Code Online (Sandbox Code Playgroud)
在我这样做之后docker-compose up --build,在构建过程中没有任何错误,但是当我这样做docker …
gd2 ×10
php ×9
codeigniter ×2
gd ×2
imagemagick ×2
thumbnails ×2
docker ×1
gamma ×1
jpeg ×1
magento ×1
mime-types ×1
png ×1
svg ×1
transparency ×1