Вопрос по image, sql-server-2008 – Изменить размер изображения с 150 * 150 до 70 * 70 при использовании sql запроса?

2

Я храню изображение в базе данных SQL Server 2008 R2 в столбце varBinary (max) с именем: image1, который имеет размер 150 * 150. Я добавил еще один столбец с именем image2 varBinary (max), и мне нужно обновить этот столбец с тем же изображением в image1, но с размером 70 * 70. Можно ли сделать это с помощью SQL-запроса.

Я пытался найти запрос, но не понял, как это сделать. Пожалуйста, дайте мне знать, если кто-то делал это раньше и как?

Нет - SQL - это хранение и извлечение данных, а не обработка изображений, извините. marc_s
Да, в настоящее время я делаю с использованием C #, но я пытаюсь найти более быстрый путь. Так что просто нужно знать, есть ли обходной путь для этого в SQL Balraj Singh
На самом деле я пытаюсь отобразить данные в виде списка с миниатюрным изображением, если одни и те же данные появляются несколько раз, а затем каждый раз, когда мне нужно изменить размер изображения, что становится дорогостоящим процессом для моего веб-сайта на Azure. Balraj Singh
Почему бы вам просто не изменить размер изображения по ходу дела - как сказал Марк, в tsql это невозможно, но я не могу придумать причину для хранения миниатюр или чего бы то ни было - давайте взглянем на marc_s avatar - ссылка довольно большаяgravatar.com/avatar/… но, как вы можете заметить, аргумент a s = 32 - размер картинки. Вы можете использовать тот же подход для вашего решения t3hn00b
SQL Server являетсяdatabase (для хранения и извлечения данных) - не процессор изображения ... вы не можете ожидать, что T-SQL сможет выполнять все виды операций, таких как изменение размера изображения - это работа дляapplication написано в C # или что-то в этом роде. marc_s

Ваш Ответ

2   ответа
2

Я согласен со всеми замечаниями, но если вы действительно хотели или должны были это сделать, вы могли бы включить интеграцию CLR на SQL Server, создать сборку, которая могла бы изменить размер вашего образа, а затем вызвать ее из триггера или процедуры. Это не очень сложно. Вот страница, которая описывает процесс:http://msdn.microsoft.com/en-us/library/ms254498(VS.80).aspx

В основном, чтобы включить CLR на SQL Server:

sp_configure 'clr enabled', 1
GO
RECONFIGURE
GO

Создайте сборку c #, чтобы изменить размер вашего изображения:

using System;
using System.Data;
using Microsoft.SqlServer.Server;
using System.Data.SqlTypes;

public class ResizeImageProc
{
    [Microsoft.SqlServer.Server.SqlProcedure]
    public static void ResizeImage(int ImageID, int width, int height)
    {
       //TODO: ResizeImage Code
    }
}

Скомпилируйте сборку

csc /target:library ResizeImageProc.cs 

Загрузите сборку в SQL Server:

CREATE ASSEMBLY ResizeImageAssembly from 'c:\ResizeImageProc.dll' WITH PERMISSION_SET = SAFE

Создать процедуру

CREATE PROCEDURE ResizeImage AS EXTERNAL NAME ResizeImageAssembly.ResizeImageProc.ResizeImage

После этого вы можете назвать его как обычный процесс. Например:

EXEC ResizeImage(1,800,600)
2

Как было сказано в нескольких комментариях, SQL является системой хранения данных и не может редактировать ваши изображения.

Я предлагаю вам выполнить однократное обновление таблицы, используя предпочитаемый вами язык (c # и т. Д.), Выбрав каждое изображение и изменив его размер, прежде чем обновлять его обратно в таблицу.

Затем с этого момента убедитесь, что размеры любых изображений, вставленных в таблицу, изменяются до их вставки.

Я согласен, что это лучший подход, и использование языка .NET позволит вам сделать это довольно легко. Посмотри наSystem.Drawing.

Похожие вопросы