我有一个 php 脚本,它可以保存原始图像,然后调整它的大小 - 一个缩略图和一个较大的图像供网络查看。这很好用,除了一些图像质量很差。它似乎是用一个非常低的颜色托盘保存的。您可以在 http://kalpaitch.com/index.php?filter=white 查看结果- 单击标题为“白色白色白色”的第一个缩略图
下面是用于图像重采样的代码:
function resizeImg($name, $extension, $size1, $size2) {
if (preg_match('/jpg|jpeg|JPG|JPEG/',$extension)){
$image = imagecreatefromjpeg($name);
}
if (preg_match('/gif|GIF/',$extension)){
$image = imagecreatefromgif($name);
}
$old_width = imageSX($image);
$old_height = imageSY($image);
$old_aspect_ratio = $old_width/$old_height;
if($size2 == 0){
$new_aspect_ratio = $old_aspect_ratio;
if($old_width > $old_height){
$new_width = $size1;
$new_height = $new_width / $old_aspect_ratio;
} else {
$new_height = $size1;
$new_width = $new_height * $old_aspect_ratio;
}
} elseif($size2 > 0){
$new_aspect_ratio = $size1/$size2;
//for landscape potographs
if($old_aspect_ratio >= $new_aspect_ratio) {
$x1 = round(($old_width - ($old_width * ($new_aspect_ratio/$old_aspect_ratio)))/2);
$old_width = round($old_width * ($new_aspect_ratio/$old_aspect_ratio));
$y1 = 0;
$new_width = $size1;
$new_height = $size2;
//for portrait photographs
} else{
$x1 = 0;
$y1 = 0;
$old_height = round($old_width/$new_aspect_ratio);
$new_width = $size1;
$new_height = $size2;
}
}
$new_image = imagecreatetruecolor($new_width, $new_height);
imagecopyresampled($new_image, $image, 0, 0, $x1, $y1, $new_width, $new_height, $old_width, $old_height);
return $new_image;
非常感谢
附言 [从服务器中删除的照片]
这是上传代码的其余部分:
// Move the original to the right place
$result = @move_uploaded_file($image['tmp_name'], $origlocation);
// Resize the image and save the thumbnail
$new_image = resizeImg($origlocation, $extension, 500, 0);
if (preg_match("/gif/",$extension)){
imagegif($new_image, $normallocation);
} else {
imagejpeg($new_image, $normallocation);
}
// Resize the image and save the thumbnail
$new_image = resizeImg($origlocation, $extension, 190, 120);
if (preg_match("/gif/",$extension)){
imagegif($new_image, $thumblocation);
} else {
imagejpeg($new_image, $thumblocation);
}
最佳答案
质量下降不是因为 imagecopyresampled(),而是因为 JPEG 压缩。不幸的是,GD 的压缩算法无法与 Photoshop 的相提并论——事实上,几乎没有。但是您可以改进结果:GD 默认的 JPG 压缩级别是 75 of 100。
您可以使用第三个参数将质量提高到 imagejpeg() (我假设您将其用于最终输出):
imagejpeg ( $new_image, null, 99);
在 90-100 范围内玩。图像的文件大小将比原始文件大 - 这将是您支付的价格。但应该可以达到相当的质量。
或者,正如 John Himmelman 在评论中所说,尝试使用 imagepng() 以获得更好的质量 - 当然,代价是文件大小明显变大。
关于php imagecopyresampled 质量差,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2345605/
我正在运行RubyonRails3,我想使用Paperclip插件/gem降低上传图像的质量。我该怎么做?此时在我的模型文件中我有:has_attached_file:avatar,:styles=>{:thumb=>["50x50#",:jpg],:medium=>["250x250#",:jpg],:original=>["600x600#",:jpg]}这会将图像转换为.jpg格式并设置尺寸。 最佳答案 尝试使用convert_options。has_attached_file:avatar,:styles=>{:thumb=
开发者!我无法理解接下来的情况例如我有模型classPg::City我可以使用这样的代码:c=Pg::City.new({:population=>1000})putsc.population1000但是如果我取消注释上面的attr_accessible代码会抛出警告WARNING:Can'tmass-assignprotectedattributes:population如何将虚拟属性与模型属性一起用于质量分配?谢谢! 最佳答案 使用attr_accessor添加变量不会自动将其添加到attr_accessible。如果您要使用a
关闭。这个问题需要detailsorclarity.它目前不接受答案。想改进这个问题吗?通过editingthispost添加细节并澄清问题.关闭4年前。Improvethisquestion我是Ruby的新手,时间有限,因此我尝试了一些简单的东西。最近我需要创建一个文件,因为我太懒了,所以我跑去谷歌。结果:File.open(local_filename,'w'){|f|f.write(doc)}真可惜,这很简单,我应该自己做的。然后我想检查File类的方法提供了什么ruby魔法,或者在调用这些方法时是否有任何“简化”,所以我前往文档here,并检查文件类。1.8.6文档在"fi
Java自学超全干货分享!学不学自己看着办吧!最近收到了很多知友私信我:”0基础有什么推荐的Java学习工具?”★作为ACM金牌选手,这些年在跟很多学员受教的过程中,积累了一些关于新手Java学习的经验和踩过的坑,今天来跟大家分享几点:1.找准学习路径和方法(选择不对,努力白费)2.合理规划学习时间,不在没必要的技术上浪费时间(找重点)3.找一些志同道合的朋友一起学习(相互鞭策)4.找一个前辈指点(方式方法)“还没开始就结束了”,作为java新手小白,最难自然是找对学习路径和方法……于是,本着一颗无私奉献的心,我连夜整理出了8个优质的Java免费学习网站,分享给大家。NO.1菜鸟教程国内小白入
关闭。这个问题不符合StackOverflowguidelines.它目前不接受答案。要求我们推荐或查找工具、库或最喜欢的场外资源的问题对于StackOverflow来说是偏离主题的,因为它们往往会吸引自以为是的答案和垃圾邮件。相反,describetheproblem以及迄今为止为解决该问题所做的工作。关闭9年前。Improvethisquestion我真正想念Java的一件事是工具支持。FindBugs、Checkstyle和PMD构成了代码质量指标和自动错误检查的三位一体。有什么东西可以检查Ruby代码的简单错误和/或风格违规吗?如果我可以将其改编为适用于Rails等框架,从而遵
我正在尝试使用Croppie在将图像上传到服务器之前使用Javascript裁剪图像。它工作得很好,用户界面也很好。但是,在玩演示时,我注意到生成的图像质量比原始图像差得多-我使用的是1920x1080图像。有解决办法吗?我也会接受其他图书馆的推荐:) 最佳答案 如果您正在缩放或旋转图像,一些降级是预料之中的并且是不可避免的。但是,如果您只是从原始图像中裁剪一block......默认CroppieJS将以视口(viewport)大小保存裁剪后的图像。对于1920x1080的大图像,视口(viewport)尺寸(可能)小于原始图像尺
随机屏幕空间反射(SSSR)概述随机屏幕空间反射由屏幕空间反射演化而来,是SSR+IBL的合并产物。其思想都在于使用已有的图像来弥补BRDF或者说着色器渲染中对间接光照的不足。区别IBL中使用的方法是天空球,而SSSR使用的是屏幕。但也正因如此IBL中体面的妥协在SSSR中却成了最麻烦的累赘。而SSSR的出现可以说是对IBL的补完,IBL补充了环境光照,SSSR补充细节环境反射光照,而GI则是在IBL的基础上增加了细节漫反射光照。技术细节ScreenSpacestackRayMarchingScreenSpaceReflectBRDF(GXX)IBL-随机,重要性采样实现原理3.1RayMar
关闭。这个问题需要更多focused.它目前不接受答案。想改进这个问题吗?更新问题,使其只关注一个问题editingthispost.关闭8年前。Improvethisquestion我想检查所选输入图像文件的当前质量(Resolution/dpi/ppi)。我的控件是图片uploaderjquery插件。如何获取所选文件的质量?(我需要所选图像文件的分辨率而不是屏幕分辨率)
云质QMS原创转载请注明来源作者:王洪石引言 一个小小的质量问题可能引发蝴蝶效应日常生活中,我们每天都会遇到各种各样的问题,并随着它们喜怒哀乐。企业也不例外,即使有很好的管理体系以及非常高素质的员工,一些错误和问题仍会悄悄出现,且很难预先被发现。稍不注意,这些问题就可能引发蝴蝶效应,导致企业声誉受损、被客户或政府重罚、产品召回、财产损失等,甚至可能会因此而倒闭。就像张小泉“排蒜断刀”事件,事情本来并不大,但后来的发展,却远远超出了张小泉的预期。持续改进是企业永恒的主题。作为企业管理者,大到总经理或部门经理,小到车间主管,乃至班长线长,每天都是在和问题的斗争中度过的。对中小型企业的老板们而言,情
我创建了一个GooglePhotoSphere,我想将其嵌入我的页面:使用iframe,一切正常:http://fotomilo.pl/test_iframe.aspx—质量还可以。使用JavaScriptAPI,存在问题:http://fotomilo.pl/test_js.html—质量差。质量问题:看起来瓷砖不匹配。查看使用JavaScript渲染的图像和全景图。 最佳答案 我一直在寻找解决方案很长一段时间,我终于找到了.....名为“mode”的google.maps.StreetViewPanorama类的未记录的选项:'