Articles of 图像

当LAMP服务器上有数百万用户时,什么是最快和最有效的存储和提取图像的方式?

这是迄今为止我提出的最好的方法,我想知道是否有一个更好的方法(我确定有!)来存储和获取数以百万计的用户图像: 为了保持目录的大小,并避免对数据库进行任何额外的调用,我使用基于用户的唯一ID计算的嵌套目录如下: $firstDir = './images'; $secondDir = floor($userID / 100000); $thirdDir = floor(substr($id, -5, 5) / 100); $fourthDir = $userID; $imgLocation = "$firstDir/$secondDir/$thirdDir/$fourthDir/1.jpg"; 用户ID( $userID )的范围从1到数百万。 所以,如果我有用户ID 7654321 ,例如,该用户的第一张照片将被存储在: ./images/76/543/7654321/1.jpg 对于用户ID 654321 : ./images/6/543/654321/1.jpg 对于用户ID 54321 ,它将是: ./images/0/543/54321/1.jpg 对于用户ID 4321 ,它将是: ./images/0/43/4321/1.jpg 对于用户ID 321 ,它将是: ./images/0/3/321/1.jpg 对于用户ID 21 ,它将是: ./images/0/0/21/1.jpg 对于用户ID 1 ,它将是: ./images/0/0/1/1.jpg 这确保了用户高达100,000,000,我永远不会有一个目录超过1000个子目录,所以它似乎保持干净和高效。 […]

jpegtran优化而不改变文件名

我需要优化一些图片,但不能改变他们的名字。 jpegtran -copy none -optimize image.jpg > image.jpg 但是,这似乎创build一个0的文件大小。当我做到不同的文件名,大小仍然是完全一样的。

最适合约250,000个图像的网页文件夹结构

我将有大约20万张图片作为我网站的一部分。 每个图像将被存储3次:全尺寸,缩略图,更大的缩略图。 全尺寸图像大约在50Kb到500Kb之间。 正常的技术:在VPS上的Linux,Apache,MySQL,PHP。 什么是最佳的方式来存储这些通过浏览器快速检索和显示? 我应该将所有内容存储在一个文件夹中吗 我应该存储全尺寸的图像在一个文件夹,在另一个缩略图等? 我应该将图像存储在1000个文件夹中,并且保留图像所在的文件夹的索引? 感谢您的任何build议。 伟业。

如何将BMP像素值读入数组?

我用C ++编写代码(在Windows上),我试图提取灰度bmp的像素值。 我不关心保留任何元数据,只想将像素值存储在char数组中。 我一直无法find一个手动的标准或“典型”的方式,所以我想知道是否有一个简单的库,人们用来加载位图到内存中。 提前致谢!

在c ++中使用伽马校正来转换jpeg

我有一个图像img.jpg,我想要使用线性伽马校正将其转换为newImg.jpg。 我发现如何使用terminal做到这一点: convert img.jpg -gamma valueOfgamma newImg.jpg 但是现在我想在我的C ++程序中做到这一点。 我如何使用imagemagick ++或openCv做到这一点? 谢谢

C#将32bpp图像转换为8bpp

我正试图使用​​C#将32bpp截图转换为8bpp(或4bpp或1bpp)格式。 我已经看过几个类似的主题stackoverflow的答案,并且大多数build议使用以下代码的变体: public static Bitmap Convert(Bitmap oldbmp) { Bitmap newbmp = new Bitmap(oldbmp.Width, oldbmp.Height, PixelFormat.Format8bppIndexed); Graphics gr = Graphics.FromImage(newbmp); gr.PageUnit = GraphicsUnit.Pixel; gr.DrawImageUnscaled(oldbmp, 0, 0); return newbmp; } 但是,执行此操作时,我遇到了一个例外情况: A graphics object cannot be created from an image that has an indexed pixel format 。 我知道8,4和1bpp图像有颜色表映射,而不是实际的颜色像素本身(如在32或16bpp图像),所以我假设我错过了一些转换步骤的地方,但我相当新的C#从一个C + +背景),并希望能够做到这一点使用本地C#调用,而不是诉诸PInvoking BitBlt和GetDIBits等任何人能够帮助我解决这个问题? 谢谢。 编辑 :我应该指出,我需要这个向后兼容.NET框架2.0

应用简单的水印后图像大小急剧增加

我有一组图像,我编程方式使用System.Windows和System.Windows.Media.Imaging (是的,而不是与GDI +)按照这里的教程绘制一个简单的水印。 大多数图像不超过500Kb ,但是在应用简单的水印(这是具有透明背景的文本)之后,图像大小急剧增加。 例如,使用下面的方法应用水印后, 440Kb的图像变为8.33MB ,这让我感到震惊。 private static BitmapFrame ApplyWatermark(BitmapFrame image, string waterMarkText) { const int x = 5; var y = image.Height – 20; var targetVisual = new DrawingVisual(); var targetContext = targetVisual.RenderOpen(); var brush = (SolidColorBrush)(new BrushConverter().ConvertFrom("#FFFFFF")); brush.Opacity = 0.5; targetContext.DrawImage(image, new Rect(0, 0, image.Width, image.Height)); targetContext.DrawRectangle(brush, new Pen(), new Rect(0, […]

为什么bmps倒过来存储?

为什么BMP图像存储颠倒和零填充,所以他们是四字节alignment?

Visual Studio 2013 C ++中的位图透明度

我对这个感到困惑。 我使用在论坛上推荐的程序来将32位PNG转换为带有Alpha通道的32位位图。 我将这些添加到资源编辑器中,并通过工具箱将它们放到一个对话框中。 我已阅读(我认为是广泛的)位图透明度和Visual Studio中的限制。 令我费解的是,我通过Visual Studio资源编辑器将图片控件添加到我的对话框中。 例如,我有两个红色的球,一个在24位的位图,一个在32位的位图。 在Visual Studio的testing模式下,当使用资源编辑器打开.rc时,透明度看起来很好。 但是,当我以编程方式调用DialogBox时,我没有获得透明度。 DialogBox(GetModuleHandle(NULL), MAKEINTRESOURCE(IDD_DIALOG1), NULL, DialogProc); 当我点击Visual Studio中的testingbutton时,它必须调用例程DialogBox或类似的来显示位图。 当我把资源编辑器中的位图放到对话框中时,它显示透明度。 微软是做什么的,我没做什么? 我正在开发没有MFC,故意。 是这样的问题,只有在MFC可以对话框的加载透明度(我意识到它降低到CreateWindowEX)。 我意识到,各种bitblt方法也可以使用。 那是Visual Studio在幕后做的吗? 还审查了WM_CTLCOLORSTATIC等材料。你们都觉得呢? 有没有一些简单的方法来调用DialogBox并获得对话框上的透明的BMP? 或者我们都被迫使用MFC? 或者用户必须编写例程来擦除背景/绘画等 对我来说,看起来有点奇怪,没有透明的图像,对话框很容易。 需要一个非正方形的图像? 这是一个问题。 现在软件工程师必须添加大量的代码到对话callback或程序。 似乎更多的一个bug给我。 谢谢您,对于您的评论。 #include <windows.h> #include <winuser.h> #include "resource.h" INT_PTR CALLBACK DialogProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam) { int wmId, wmEvent; switch […]

用C#中的Windows默认编辑器打开一个图像

在我的C#应用​​程序中,我想启动默认图像编辑器来编辑图像。 当我使用System.Diagnostics.Process.Start("C:\\image.png")它将使用Windows照片查看器打开图像文件。 当我右键单击Windows资源pipe理器中的图像文件时,会出现一个“编辑”菜单项,启动Microsoft画图(默认情况下)。 我想在我的应用程序中做同样的事情(即使用默认的图像编辑器打开文件)。 我不想通过执行Process.Start("mspaint.exe C:\\image.png")对MS Paint进行硬编码。 我宁愿使用由用户设置的默认图像编辑器程序(可能不同于MS Paint)。 有没有办法做到这一点? 谢谢弗兰克