01.08.2017, 12:07 | #1 |
Участник
|
Image resize
Приветствую, как можно изменить через resize размер png. Есть файл в png на диске 12345.png, нужно его уменьшить на 60%. При сохранении остаются исходные размеры. Есть способы сделать resize именно в X++?
X++: Image AxImage; ; ... CustInvoice4PaymId_RU='12345'; ext='png'; h=bitmap.get_Height(); // высота загружаемой png w=bitmap.get_Width(); // ширина загружаемой png AxImage = new Image(); AxImage.createImage(w,h,8); AxImage.loadImage("Y:\\"+CustInvoice4PaymId_RU+"."+ext); w1=w*0.6; h1=h*0.6; AxImage.resize(w1,h1,0); AxImage.saveImage("Y:\\"+CustInvoice4PaymId_RU+"w9."+ext); // при сохранении остаются исходные w и h |
|
01.08.2017, 12:56 | #2 |
Участник
|
Цитата:
X++: binData = new BinData(); binData.loadFile(@"d:\2.PNG"); image = new Image(); image.setData(binData.getData()); image.resize(96,96,InterpolationMode::InterpolationModeHighQuality); image.saveImage(@"d:\2_1.png"); |
|
|
За это сообщение автора поблагодарили: TDV (1). |
01.08.2017, 22:01 | #3 |
Участник
|
Цитата:
Сообщение от maldini
У класса Image хоть он и наследник от BinData есть какие то глюки с загрузкой файла получением base64encode. Вот так работать будет
X++: binData = new BinData(); binData.loadFile(@"d:\2.PNG"); image = new Image(); image.setData(binData.getData()); image.resize(96,96,InterpolationMode::InterpolationModeHighQuality); image.saveImage(@"d:\2_1.png"); X++: AxImage = new Image(); w=w*0.6; h=h*0.6; imgnew=System.Drawing.Image::FromFile(@"Y:\1\12345.png"); h= imgnew.get_Height(); w= imgnew.get_Width(); h2=h*0.6; w2=w*0.6; bitmap = new System.Drawing.Bitmap(imgnew, w2,h2); sd = System.Drawing.Graphics::FromImage(bitmap); bitmap.Save(@"Y:\1\12345.png"); Еще вопрос, как можно задать(в X++) формат сжатия для JPG, с синтаксисом написания проблемы. В С# вроде все понятно, но на X++ не догоняю, как задать последний параметр encdp. X++: System.Drawing.Imaging.Encoder enc; System.Drawing.Imaging.EncoderParameters[] encdpall; System.Drawing.Imaging.EncoderParameters encdp; System.Drawing.Imaging.EncoderParameter encpv; System.Drawing.Imaging.ImageCodecInfo imgci; System.Drawing.Imaging.ImageCodecInfo[] imgciall; .. imgciall= System.Drawing.Imaging.ImageCodecInfo::GetImageEncoders(); imgci=imgciall.GetValue(1);// JPG enc= new System.Drawing.Imaging.Encoder(imgci.get_Clsid()); //????? encpv= new System.Drawing.Imaging.EncoderParameter(enc,1);//????? encpvall.SetValue(encpv,1);//????? encdp.set_Param(encpvall);//????? bitmap.Save(@"Y:\1\12345.jpg",imgci,encdp); |
|
02.08.2017, 09:16 | #4 |
Участник
|
|
|
02.08.2017, 11:17 | #5 |
Участник
|
|
|
02.08.2017, 15:10 | #6 |
Участник
|
Цитата:
X++: binData binData; image Image; ; binData = new BinData(); binData.loadFile(@"C:\Users\Администратор\Documents\2.PNG"); image = new Image(); image.setData(binData.getData()); image.resize(8,8,InterpolationMode::InterpolationModeHighQuality); image.saveImage(@"C:\Users\Администратор\Documents\2_1.png"); |
|
03.08.2017, 11:31 | #7 |
Участник
|
Цитата:
Сообщение от maldini
Проверил на DAX 2009SP1. Тоже все работает
X++: binData binData; image Image; ; binData = new BinData(); binData.loadFile(@"C:\Users\Администратор\Documents\2.PNG"); image = new Image(); image.setData(binData.getData()); image.resize(8,8,InterpolationMode::InterpolationModeHighQuality); image.saveImage(@"C:\Users\Администратор\Documents\2_1.png"); Вообщем от этого варианта отказался, так как размер файла(для JPG) после resize увеличивается, что плохо, а копать сжатие нет желания. В Ghostscript через -r за менее чем секунду преобразовывает pdf в jpg(png) с мизерным размером, что устраивает. Спасибо еще раз! Последний раз редактировалось TDV; 03.08.2017 в 11:45. |
|
03.08.2017, 11:37 | #8 |
Участник
|
На всякий случай то что в run on server классе, там где не меняет разрешение, но увеличивает размер файла(за счет не регулируемого сжатия для JPG). Для PNG и размер такой же остается и разрешение.
X++: static void test12() { binData binData; image Image; InteropPermission perm; InteropPermission perm2; Set permissionSet; ; perm = new InteropPermission(InteropKind::ClrInterop); permissionSet = new Set(Types::Class); permissionSet.add(new FileIoPermission(@"Y:\1\1.JPG",'rw')); permissionSet.add(new FileIoPermission(@"Y:\1\3.JPG",'rw')); CodeAccessPermission::assertMultiple(permissionSet); binData = new BinData(); binData.loadFile(@"Y:\1\1.JPG"); image = new Image(); image.setData(binData.getData()); image.resize(8,8,InterpolationMode::InterpolationModeHighQuality); image.saveImage(@"Y:\1\3.JPG"); CodeAccessPermission::revertAssert(); } Последний раз редактировалось TDV; 03.08.2017 в 11:41. Причина: добавил: там где не меняет разрешение, но увеличивает рзамер |
|
03.08.2017, 14:12 | #9 |
Участник
|
Цитата:
X++: static void test12(Args _args) { binData binData; image Image; InteropPermission perm; InteropPermission perm2; Set permissionSet; ; perm = new InteropPermission(InteropKind::ClrInterop); permissionSet = new Set(Types::Class); permissionSet.add(new FileIoPermission(@"Y:\1\1.JPG",'rw')); permissionSet.add(new FileIoPermission(@"Y:\1\3.JPG",'rw')); CodeAccessPermission::assertMultiple(permissionSet); binData = new BinData(); binData.loadFile(@"Y:\1\1.JPG"); image = new Image(); image.setData(binData.getData()); image.resize(64,64,InterpolationMode::InterpolationModeHighQuality); binData = new BinData(); binData.setData(image.getData()); binData.saveFile(@"Y:\1\3.JPG"); CodeAccessPermission::revertAssert(); } |
|
03.08.2017, 17:32 | #10 |
Участник
|
Цитата:
Сообщение от maldini
X++: static void test12(Args _args) { binData binData; image Image; InteropPermission perm; InteropPermission perm2; Set permissionSet; ; perm = new InteropPermission(InteropKind::ClrInterop); permissionSet = new Set(Types::Class); permissionSet.add(new FileIoPermission(@"Y:\1\1.JPG",'rw')); permissionSet.add(new FileIoPermission(@"Y:\1\3.JPG",'rw')); CodeAccessPermission::assertMultiple(permissionSet); binData = new BinData(); binData.loadFile(@"Y:\1\1.JPG"); image = new Image(); image.setData(binData.getData()); image.resize(64,64,InterpolationMode::InterpolationModeHighQuality); binData = new BinData(); binData.setData(image.getData()); binData.saveFile(@"Y:\1\3.JPG"); CodeAccessPermission::revertAssert(); } |
|
04.08.2017, 10:18 | #11 |
Участник
|
|
|
|
За это сообщение автора поблагодарили: TDV (1). |