Как получить размеры фото

JanCarlo

Client
Регистрация
04.03.2018
Сообщения
358
Благодарностей
40
Баллы
28
Добрый день!

есть список ссылок на фотки, ссылки прямые, нужно узнать точные размеры фоток (ширина и высота) в пикселях, и далее занести ширину и высоту в две переменные.

1) как сделать это Не скачивая фотку на комп
2) и как это сделать скачав фотку на комп =)

заранее спасибо
 

orka13

Client
Регистрация
07.05.2015
Сообщения
2 177
Благодарностей
2 184
Баллы
113
1) никак
2)
C#:
string path = project.Variables["Get_Otvet_n_Jpg"].Value; // Путь к файлу
Image img = Image.FromFile(path);
project.Variables["Img_Widhth"].Value = img.Width.ToString();
project.Variables["Img_Height"].Value = img.Height.ToString();

//return img.Size; // Ширина x Высота
// или
//return img.Width; // Ширина
//return img.Height; // Высота
 

dr1veq

Пользователь
Регистрация
09.02.2018
Сообщения
39
Благодарностей
44
Баллы
18
Добрый день!

1) как сделать это Не скачивая фотку на комп
Можно качать, но не сохранять фотку на комп

Код:
     Image img = null; 
               string image =  project.Variables["imageUrl"].Value;    //Ссылка на картинку
                try
                {
                    WebClient wc = new WebClient();
                    byte[] bytes = wc.DownloadData(image);
                    MemoryStream ms = new MemoryStream(bytes);
                    img = System.Drawing.Image.FromStream(ms);
                    project.Variables["width"].Value = img.Width.ToString();
                    project.Variables["height"].Value = img.Height.ToString();
                  
                }
                catch
                {
                  
                }
 

Rainsteel

Client
Регистрация
08.04.2015
Сообщения
102
Благодарностей
9
Баллы
18
1) никак
2)
C#:
string path = project.Variables["Get_Otvet_n_Jpg"].Value; // Путь к файлу
Image img = Image.FromFile(path);
project.Variables["Img_Widhth"].Value = img.Width.ToString();
project.Variables["Img_Height"].Value = img.Height.ToString();

//return img.Size; // Ширина x Высота
// или
//return img.Width; // Ширина
//return img.Height; // Высота
Спасибо большое, все работает
 
Последнее редактирование:

smartwisard

Client
Регистрация
17.01.2017
Сообщения
824
Благодарностей
83
Баллы
28
Я уже привык, что в моих руках код не работает. Как именно надо написать, чтобы смотреть размер изображения?
Нужно возвращать в какую-нибудь переменную? Как это делать? А то я фигурные скобочки даже не умею поставить.
Код:
string path = project.Variables["Get_Otvet_n_Jpg"].Value; // Путь к файлу
Image img = Image.FromFile(path);
project.Variables["Img_Widhth"].Value = img.Width.ToString();
project.Variables["Img_Height"].Value = img.Height.ToString();
return img.Size; // Ширина x Высота
 

ssXXXss

Client
Регистрация
23.12.2014
Сообщения
7 375
Благодарностей
2 040
Баллы
113
Я уже привык, что в моих руках код не работает. Как именно надо написать, чтобы смотреть размер изображения?
Нужно возвращать в какую-нибудь переменную? Как это делать? А то я фигурные скобочки даже не умею поставить.
Код:
string path = project.Variables["Get_Otvet_n_Jpg"].Value; // Путь к файлу
Image img = Image.FromFile(path);
project.Variables["Img_Widhth"].Value = img.Width.ToString();
project.Variables["Img_Height"].Value = img.Height.ToString();
return img.Size; // Ширина x Высота
а что не записывает высоту и ширину разве в твоём примере ?
 

smartwisard

Client
Регистрация
17.01.2017
Сообщения
824
Благодарностей
83
Баллы
28
Вот уже догадался создать переменные Img_Widhth и Img_Height , догадался что путь к файлу должен вести на диск С:, не Url.
Теперь сработало. Сегодня вроде уже не сломаю, а завтра опять вспоминать, как сделал. Так что подсказки ещё могут понадобиться.

Я ж не догадался поначалу переменные создать )) Я с кодом ещё не дружу ну совсем.

Код:
string path = project.Variables["PathToTheDiskC:File"].Value; // Путь к файлу
Image img = Image.FromFile(path);
project.Variables["Img_Widhth"].Value = img.Width.ToString();
project.Variables["Img_Height"].Value = img.Height.ToString();
 
Последнее редактирование:
  • Спасибо
Реакции: Alex.A и termit

smartwisard

Client
Регистрация
17.01.2017
Сообщения
824
Благодарностей
83
Баллы
28
Сейчас буду мучительно Img_Widhth и Img_Height перемножать, т.к. хочу сделать проверку изображение весом не больше 1 млн байт. Или их не перемножают. Блин, не знаю ((

А как, собственно, проверить, чтобы размеры изображений были не больше 1 млн байт?
Изображения я уже собрал себе на комп.
Img_Size или ширину с длиной найду, шаблончик, перебирающий все мои изображения сделать сделаю, но как отсеивать изображения больше 1 млн байт — не пойму толком.

Ушёл гуглить запрос "размер и вес изображения".
 

Err0r

Client
Регистрация
17.05.2015
Сообщения
157
Благодарностей
110
Баллы
43
  • Спасибо
Реакции: smartwisard

kagorec

Client
Регистрация
24.08.2013
Сообщения
979
Благодарностей
525
Баллы
93
Можно качать, но не сохранять фотку на комп

Код:
     Image img = null;
               string image =  project.Variables["imageUrl"].Value;    //Ссылка на картинку
                try
                {
                    WebClient wc = new WebClient();
                    byte[] bytes = wc.DownloadData(image);
                    MemoryStream ms = new MemoryStream(bytes);
                    img = System.Drawing.Image.FromStream(ms);
                    project.Variables["width"].Value = img.Width.ToString();
                    project.Variables["height"].Value = img.Height.ToString();
              
                }
                catch
                {
              
                }
Не работает, видимо что-то не хватает.
C#:
Компиляция кода  Ошибка в действии "CS0246" "The type or namespace name 'WebClient' could not be found (are you missing a using directive or an assembly reference?)". [Строка: 4; Cтолбец: 40]
upd:

Нужно было Директива using добавить код:
C#:
using System.Web;
using System.Net;
 
Последнее редактирование:

ankur

Client
Регистрация
19.05.2012
Сообщения
83
Благодарностей
48
Баллы
18
Не работает, видимо не хватает dll, подскажите пожалуйста
C#:
Компиляция кода  Ошибка в действии "CS0246" "The type or namespace name 'WebClient' could not be found (are you missing a using directive or an assembly reference?)". [Строка: 4; Cтолбец: 40]
using System.Net;
 
  • Спасибо
Реакции: kagorec

BAZAg

Client
Регистрация
08.11.2015
Сообщения
1 788
Благодарностей
2 454
Баллы
113
Не работает, видимо не хватает dll, подскажите пожалуйста
66446

Скачивание картинки без сохранения в файл и вывод ширины/высоты в лог:
string url = @"https://zennolab.com/discussion/data/avatars/m/11/11375.jpg?1446968218"; // путь к картинке
string proxy = ""; // прокси
string[] headers = new[]{string.Empty};
byte[] imgbytes = ZennoPoster.HTTP.RequestBytes(
    method:ZennoLab.InterfacesLibrary.Enums.Http.HttpMethod.GET,
    url:url,
    content:"",
    contentPostingType:"",
    proxy:proxy,
    AdditionalHeaders: headers,
    cookieContainer: project.Profile.CookieContainer); // скачиваем в массив байт

int width = -1; // переменная для хранения ширины
int height = -1; // переменная для хранения высоты
using (MemoryStream ms = new MemoryStream(imgbytes)){ // забрасываем массив байт в поток
    Image img = Image.FromStream(ms); // Создаем картинку с потока
    width = img.Width; // Определяем ширину картинки
    height = img.Height; // определяем высоту картинки
}

project.SendInfoToLog(string.Format(@"width={0} heidht={0}",width, height)); // выводим в лог результат
 
  • Спасибо
Реакции: eee, termit и kagorec

kagorec

Client
Регистрация
24.08.2013
Сообщения
979
Благодарностей
525
Баллы
93
Можно качать, но не сохранять фотку на комп

Код:
     Image img = null;
               string image =  project.Variables["imageUrl"].Value;    //Ссылка на картинку
                try
                {
                    WebClient wc = new WebClient();
                    byte[] bytes = wc.DownloadData(image);
                    MemoryStream ms = new MemoryStream(bytes);
                    img = System.Drawing.Image.FromStream(ms);
                    project.Variables["width"].Value = img.Width.ToString();
                    project.Variables["height"].Value = img.Height.ToString();
               
                }
                catch
                {
               
                }
Подскажите что не так в снипете?
С обычными форматами работает, но если картинка webp то не понимает. Высота и ширина пустые в итоге
 
Последнее редактирование:

Garry Potter

Client
Регистрация
11.01.2022
Сообщения
39
Благодарностей
6
Баллы
8
Посмотреть вложение 66446
Скачивание картинки без сохранения в файл и вывод ширины/высоты в лог:
string url = @"https://zennolab.com/discussion/data/avatars/m/11/11375.jpg?1446968218"; // путь к картинке
string proxy = ""; // прокси
string[] headers = new[]{string.Empty};
byte[] imgbytes = ZennoPoster.HTTP.RequestBytes(
    method:ZennoLab.InterfacesLibrary.Enums.Http.HttpMethod.GET,
    url:url,
    content:"",
    contentPostingType:"",
    proxy:proxy,
    AdditionalHeaders: headers,
    cookieContainer: project.Profile.CookieContainer); // скачиваем в массив байт

int width = -1; // переменная для хранения ширины
int height = -1; // переменная для хранения высоты
using (MemoryStream ms = new MemoryStream(imgbytes)){ // забрасываем массив байт в поток
    Image img = Image.FromStream(ms); // Создаем картинку с потока
    width = img.Width; // Определяем ширину картинки
    height = img.Height; // определяем высоту картинки
}

project.SendInfoToLog(string.Format(@"width={0} heidht={0}",width, height)); // выводим в лог результат
Здравствуйте, позвольте пару нубских вопросов по этому коду.

1. У меня почему-то всегда ширина равна высоте (даже если это не так). Т.е. width вычисляется правильно, а дальше height всегда равна width (хотя это не всегда так). В вашем примере картинка действительно квадратная, но как другие считает? Это у меня что-то не так?

2. Урл картинки у меня хранится в переменной в Зеннопостере, как мне его использовать в этом коде?

3. Как результат (ширину и высоту) положить в 2 переменные в Зеннопостер?
 
Последнее редактирование:

BAZAg

Client
Регистрация
08.11.2015
Сообщения
1 788
Благодарностей
2 454
Баллы
113
Здравствуйте, позвольте пару нубских вопросов по этому коду.

1. У меня почему-то всегда ширина равна высоте (даже если это не так).
2. Урл картинки у меня хранится в переменной в Зеннопостере, как мне его использовать в этом коде?
3. Как результат (ширину и высоту) положить в 2 переменные в Зеннопостер?
Ошибка только в выводе в лог, в реальности считает нормально.
есть: project.SendInfoToLog(string.Format(@"width={0} heidht={0}",width, height));
надо project.SendInfoToLog(string.Format(@"width={0} heidht={1}",width, height));



98743


Добавил ниже с выводом в переменные и получением пути с переменной.
C#:
string url = project.Variables["url"].Value; // путь к картинке https://i.ibb.co/sgs0qMm/img.jpg
string proxy = ""; // прокси
string[] headers = new[]{string.Empty};
byte[] imgbytes = ZennoPoster.HTTP.RequestBytes(
    method:ZennoLab.InterfacesLibrary.Enums.Http.HttpMethod.GET,
    url:url,
    content:"",
    contentPostingType:"",
    proxy:proxy,
    AdditionalHeaders: headers,
    cookieContainer: project.Profile.CookieContainer); // скачиваем в массив байт

int width = -1; // переменная для хранения ширины
int height = -1; // переменная для хранения высоты
using (MemoryStream ms = new MemoryStream(imgbytes)){ // забрасываем массив байт в поток
    Image img = Image.FromStream(ms); // Создаем картинку с потока
    width = img.Width; // Определяем ширину картинки
    height = img.Height; // определяем высоту картинки
}

project.Variables["width"].Value = width.ToString();
project.Variables["height"].Value =  height.ToString();
project.SendInfoToLog(string.Format(@"width={0} heidht={1}",width, height)); // выводим в лог результат
 
  • Спасибо
Реакции: Garry Potter и Alexmd

Garry Potter

Client
Регистрация
11.01.2022
Сообщения
39
Благодарностей
6
Баллы
8
Работает, большое спасибо!
 
  • Спасибо
Реакции: BAZAg

BAZAg

Client
Регистрация
08.11.2015
Сообщения
1 788
Благодарностей
2 454
Баллы
113
Если этот код будет использоваться внутри Зенно, то нужно не забыть ещё память очистить.
В 19 строке пометил строчку которую ещё необходимо добавить.
Без этой строчки могут быть проблемы с памятью (я ведь не знаю в сколько потоков будет выполняться данное действие и сколько ещё времени будет работать шаблон после выполнения данного кубика).
Работает, большое спасибо!
C#:
string url = project.Variables["url"].Value; // путь к картинке
string proxy = ""; // прокси
string[] headers = new[]{string.Empty};
byte[] imgbytes = ZennoPoster.HTTP.RequestBytes(
    method:ZennoLab.InterfacesLibrary.Enums.Http.HttpMethod.GET,
    url:url,
    content:"",
    contentPostingType:"",
    proxy:proxy,
    AdditionalHeaders: headers,
    cookieContainer: project.Profile.CookieContainer); // скачиваем в массив байт

int width = -1; // переменная для хранения ширины
int height = -1; // переменная для хранения высоты
using (MemoryStream ms = new MemoryStream(imgbytes)){ // забрасываем массив байт в поток
    Image img = Image.FromStream(ms); // Создаем картинку с потока
    width = img.Width; // Определяем ширину картинки
    height = img.Height; // определяем высоту картинки
    img.Dispose();
}

project.Variables["width"].Value = width.ToString();
project.Variables["height"].Value =  height.ToString();
project.SendInfoToLog(string.Format(@"width={0} heidht={1}",width, height)); // выводим в лог результат
 
  • Спасибо
Реакции: Garry Potter

Garry Potter

Client
Регистрация
11.01.2022
Сообщения
39
Благодарностей
6
Баллы
8
Если этот код будет использоваться внутри Зенно, то нужно не забыть ещё память очистить.
В 19 строке пометил строчку которую ещё необходимо добавить.
Без этой строчки могут быть проблемы с памятью (я ведь не знаю в сколько потоков будет выполняться данное действие и сколько ещё времени будет работать шаблон после выполнения данного кубика).

C#:
string url = project.Variables["url"].Value; // путь к картинке
string proxy = ""; // прокси
string[] headers = new[]{string.Empty};
byte[] imgbytes = ZennoPoster.HTTP.RequestBytes(
    method:ZennoLab.InterfacesLibrary.Enums.Http.HttpMethod.GET,
    url:url,
    content:"",
    contentPostingType:"",
    proxy:proxy,
    AdditionalHeaders: headers,
    cookieContainer: project.Profile.CookieContainer); // скачиваем в массив байт

int width = -1; // переменная для хранения ширины
int height = -1; // переменная для хранения высоты
using (MemoryStream ms = new MemoryStream(imgbytes)){ // забрасываем массив байт в поток
    Image img = Image.FromStream(ms); // Создаем картинку с потока
    width = img.Width; // Определяем ширину картинки
    height = img.Height; // определяем высоту картинки
    img.Dispose();
}

project.Variables["width"].Value = width.ToString();
project.Variables["height"].Value =  height.ToString();
project.SendInfoToLog(string.Format(@"width={0} heidht={1}",width, height)); // выводим в лог результат
Здравствуйте.
Подскажите, можно ли еще улучшить ваш код, уточнив юзер-агент, который будет обращаться к картинке?
Например, нужно, чтобы обращался такой юзер-агент:
TelegramBot (like TwitterBot)
 

BAZAg

Client
Регистрация
08.11.2015
Сообщения
1 788
Благодарностей
2 454
Баллы
113
Здравствуйте.
Подскажите, можно ли еще улучшить ваш код, уточнив юзер-агент, который будет обращаться к картинке?
Например, нужно, чтобы обращался такой юзер-агент:
TelegramBot (like TwitterBot)
Попробуйте добавить параметр, должно сработать:
C#:
byte[] imgbytes = ZennoPoster.HTTP.RequestBytes(
    method:ZennoLab.InterfacesLibrary.Enums.Http.HttpMethod.GET,
    url:url,
    content:"",
    contentPostingType:"",
    proxy:proxy,
    UserAgent: "TelegramBot (like TwitterBot)",
    AdditionalHeaders: headers,
    cookieContainer: project.Profile.CookieContainer);
 
  • Спасибо
Реакции: Garry Potter

Garry Potter

Client
Регистрация
11.01.2022
Сообщения
39
Благодарностей
6
Баллы
8
Работает, спасибо!
 

Mat

Client
Регистрация
23.05.2019
Сообщения
19
Благодарностей
1
Баллы
3
Подскажите что не так в снипете?
С обычными форматами работает, но если картинка webp то не понимает. Высота и ширина пустые в итоге
Не нашли решение? Сейчас столкнулся с этой же проблемой. Jpg, jpeg считает нормально, а webp не хочет. Как решить? :bn:
 

kagorec

Client
Регистрация
24.08.2013
Сообщения
979
Благодарностей
525
Баллы
93
Немного искал, не нашел
п.с. тогда еще ChatGPT небыло)
 
  • Спасибо
Реакции: djaga

djaga

Administrator
Команда форума
Регистрация
26.04.2020
Сообщения
551
Благодарностей
1 131
Баллы
93
Не нашли решение? Сейчас столкнулся с этой же проблемой. Jpg, jpeg считает нормально, а webp не хочет. Как решить? :bn:
Немного искал, не нашел
п.с. тогда еще ChatGPT небыло)
Попробуйте с помощью ImageMagick
* Не забудьте подключить через GAC подходящую для ZP.

Получить размеры:
using (MagickImage image = new MagickImage(imgbytes))
{
    width = image.Width;
    height = image.Height;
}
 

Kenny Powers

Client
Регистрация
18.10.2023
Сообщения
2
Благодарностей
1
Баллы
3
1) никак
2)
C#:
string path = project.Variables["Get_Otvet_n_Jpg"].Value; // Путь к файлу
Image img = Image.FromFile(path);
project.Variables["Img_Widhth"].Value = img.Width.ToString();
project.Variables["Img_Height"].Value = img.Height.ToString();

//return img.Size; // Ширина x Высота
// или
//return img.Width; // Ширина
//return img.Height; // Высота
Здравствуйте. Всё пытаюсь заставить этот код работать, но ничего не работает, уже не понимаю, что не так. Буду крайне признателен, если подскажете, в чем заключается моя проблема. В лог выдается ошибка
Выполнение действия CSharp OwnCode. (путь к файлу)

UPD: Проблему решил, прощу прощения за беспокойство)
 

Вложения

  • 197,1 КБ Просмотры: 53
  • 197,1 КБ Просмотры: 48
Последнее редактирование:

lutidza

Client
Регистрация
26.05.2011
Сообщения
65
Благодарностей
15
Баллы
8
Экшен: Свой код C#
C#:
var IMG_PATH = '/.... Путь до файла или переменная Zenno'
var size = System.Drawing.Image.FromFile(IMG_PATH).Size;
return size;
Результат:
{Width=1200, Height=900}

Для того, чтобы вернуть отдельно ширину или высотку в return передаём size.Width или size.Height, соответственно :dm:
 

kagorec

Client
Регистрация
24.08.2013
Сообщения
979
Благодарностей
525
Баллы
93
Обновление снипета C# из первых сообщений, теперь с поддержкой webp

C#:
SixLabors.ImageSharp.Image<Rgba32> img = null;
string image = project.Variables["img_url"].Value; // Ссылка на картинку
try
{
    WebClient wc = new WebClient();
    byte[] bytes = wc.DownloadData(image);
    using (MemoryStream ms = new MemoryStream(bytes))
    {
        // Загрузка изображения через ImageSharp (поддержка webp, jpg, png, gif и др.)
        img = SixLabors.ImageSharp.Image.Load<Rgba32>(ms);

        // Получаем ширину и высоту изображения
        project.Variables["imgwidth"].Value = img.Width.ToString();
        project.Variables["imgheight"].Value = img.Height.ToString();
    }
}
catch (Exception ex)
{
    // Логирование ошибки или обработка исключения
    project.SendErrorToLog("Ошибка загрузки изображения: " + ex.Message);
}
 
Последнее редактирование модератором:
  • Спасибо
Реакции: djaga и Sergodjan

Кто просматривает тему: (Всего: 1, Пользователи: 0, Гости: 1)