微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在项目页面上传图像时调整图像大小

如何解决在项目页面上传图像时调整图像大小

每当将图片上传到库存商品页面时,我都必须将图片调整为重磅大小并上传相同的副本。

如何覆盖上传功能添加我的逻辑?

解决方法

上传函数是HandleUploadPXImageUploader控件的PX.Web.UI。 您可以尝试覆盖该功能,然后将页面上的控件替换为您的。

另一种方法是处理 InventoryItemMaint 图中的大小调整。 您可以检查 ImageUrl 字段更新并在那里调整大小。每当您上传新图片时,URL 基本上都会更新。请不要在生产中使用以下示例,因为它从未经过全面测试。

// Acuminator disable once PX1016 ExtensionDoesNotDeclareIsActiveMethod extension should be constantly active
public class InventoryItemMaintExt : PXGraphExtension<InventoryItemMaint>
{
    public PXSelect<UploadFileRevision> uploadFileRevisions;
    protected virtual void InventoryItem_ImageUrl_FieldUpdated(PXCache sender,PXFieldUpdatedEventArgs e,PXFieldUpdated baseMethod)
    {
        baseMethod?.Invoke(sender,e);
        if(e.Row is InventoryItem row)
        {
            if ((string)e.OldValue != row.ImageUrl) //ADD conditions so that this doesn't work any time user change the image if there are multiple attached
            {
                UpdateImageFileRevisionToResizedImage(sender,row);
            }
        }
    }

    private void UpdateImageFileRevisionToResizedImage(PXCache sender,InventoryItem row)
    {
        var fileNotes = PXNoteAttribute.GetFileNotes(sender,row);
        UploadFileRevision uploadedFile = GetFile(sender.Graph,fileNotes,row.ImageUrl);
        if (uploadedFile != null)
        {
            var data = ResizeImage(uploadedFile.Data);
            uploadedFile.Data = data;
            uploadFileRevisions.Update(uploadedFile);
        }
    }

    //WARNING: DON'T USE THIS METHOD IN PRODUCTION.
    // USE ANY OTHER RECOMMENDED METHOD TO RESIZE IMAGES
    private static byte[] ResizeImage(byte[] data)
    {
        System.IO.MemoryStream myMemStream = new System.IO.MemoryStream(data);
        System.Drawing.Image fullsizeImage = System.Drawing.Image.FromStream(myMemStream);
        System.Drawing.Image newImage = fullsizeImage.GetThumbnailImage(200,200,null,IntPtr.Zero);
        System.IO.MemoryStream myResult = new System.IO.MemoryStream();
        newImage.Save(myResult,System.Drawing.Imaging.ImageFormat.Jpeg);  //Or whatever format you want.
        return myResult.ToArray();  //Returns a new byte array.
    }

    private static UploadFileRevision GetFile(PXGraph graph,Guid[] fileIds,string fileUrl)
    {
        return (UploadFileRevision)PXSelectBase<UploadFileRevision,PXSelectJoin< UploadFileRevision,InnerJoin <UploadFile,On<UploadFile.fileID,Equal<UploadFileRevision.fileID>,And<UploadFile.lastRevisionID,Equal<UploadFileRevision.fileRevisionID>>>>,Where<UploadFile.fileID,In<Required<UploadFile.fileID>>,And<UploadFile.name,Equal<Required<UploadFile.name>>>>>.Config>.Select(graph,new object[]
        {
            fileIds,fileUrl
        });
    }
}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。